#2249 closed enhancement (fixed)
Addition of "once" event handler
Reported by: | bfattori | Owned by: | |
---|---|---|---|
Priority: | minor | Milestone: | 1.2.4 |
Component: | event | Version: | 1.2.2 |
Keywords: | once, one, bind, events | Cc: | |
Blocked by: | Blocking: |
Description
The following code will assign an event, and then unbind that event immediately after assignment. Similar in effect to "one", however "one" will unbind all events bound to the type. "once" will only unbind the event passed.
/** * Similar in effect to using one() to bind an event to fire once and be * removed, however this will only remove the handler you assign. Any * handlers already assigned to the event will not be removed as one() does. */ once: function(type, data, fn) { return this.each(function(){ jQuery.event.add( this, type, function(event) { jQuery(this).unbind(event, arguments.callee); return (fn || data).apply( this, arguments); }, data); }); }
Attachments (3)
Change History (12)
comment:1 Changed 15 years ago by
comment:2 Changed 15 years ago by
I think this is actually a bug of jQuery, IMO one should only unbind the recently bound function.
comment:3 Changed 15 years ago by
I have one more suggestion about "one" function: currently it isn't possible to unbind function bound using one(), i.e. unbind in the following code doesn't work:
function test() { alert("test"); } $(document).one("click", test); $(document).unbind("click", test);
I guess it would be good to have the ability to unbind "one" event handlers.
comment:4 Changed 15 years ago by
It might also be used for jQuery.fn._toggle, mapping both (or more) functions, to the bound click handler.
Changed 15 years ago by
Attachment: | one+proxy.diff added |
---|
Should fix the proxy issue, and adds a generic function for jQuery to reuse. Implemented it in jQuery.event.add.
Changed 15 years ago by
Attachment: | one+diff+toggle.diff added |
---|
$.proxy moved to $.event.proxy, merged with the 'toggle-with-n-functions' feature. proxy is implemented in toggle as well.
comment:7 Changed 15 years ago by
Milestone: | 1.2.3 → 1.2.4 |
---|
comment:8 follow-up: 9 Changed 15 years ago by
It seems that the fix for this [source:tags/1.2.4/src/event.js#L403 didn't actually make it into v1.2.4], so I'd suggest changing the milestone to avoid confusing others like myself (who actually that this was fixed in v1.2.4).
comment:9 Changed 15 years ago by
Replying to aheimlich:
(who actually that this was fixed in v1.2.4).
duurrrr....
That should have been: (who actually thought that this was fixed in v1.2.4).
Crap... I hate that I cannot edit my ticket! It doesn't unbind after assignment, but after execution
Sheesh... =)