Added in #690, the ability to remove an event handler from inside itself.
This commit is contained in:
parent
c20924818c
commit
baa44a8f27
13
src/jquery/coreTest.js
vendored
13
src/jquery/coreTest.js
vendored
|
@ -564,3 +564,16 @@ test("removeClass(String) - add three classes and remove again", function() {
|
||||||
test("removeAttr(String", function() {
|
test("removeAttr(String", function() {
|
||||||
ok( $('#mark').removeAttr("class")[0].className == "", "remove class" );
|
ok( $('#mark').removeAttr("class")[0].className == "", "remove class" );
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("unbind(event)", function() {
|
||||||
|
expect(3);
|
||||||
|
var el = $("#firstp");
|
||||||
|
el.click(function() {
|
||||||
|
ok( true, "Fake normal bind" );
|
||||||
|
});
|
||||||
|
el.click(function(event) {
|
||||||
|
el.unbind(event);
|
||||||
|
ok( true, "Fake onebind" );
|
||||||
|
});
|
||||||
|
el.click().click();
|
||||||
|
});
|
||||||
|
|
8
src/jquery/jquery.js
vendored
8
src/jquery/jquery.js
vendored
|
@ -2090,7 +2090,9 @@ jQuery.extend({
|
||||||
// Detach an event or set of events from an element
|
// Detach an event or set of events from an element
|
||||||
remove: function(element, type, handler) {
|
remove: function(element, type, handler) {
|
||||||
if (element.events)
|
if (element.events)
|
||||||
if (type && element.events[type])
|
if ( type && type.type )
|
||||||
|
delete element.events[ type.type ][ type.handler.guid ];
|
||||||
|
else if (type && element.events[type])
|
||||||
if ( handler )
|
if ( handler )
|
||||||
delete element.events[type][handler.guid];
|
delete element.events[type][handler.guid];
|
||||||
else
|
else
|
||||||
|
@ -2135,6 +2137,10 @@ jQuery.extend({
|
||||||
args.unshift( event );
|
args.unshift( event );
|
||||||
|
|
||||||
for ( var j in c ) {
|
for ( var j in c ) {
|
||||||
|
// Pass in a reference to the handler function itself
|
||||||
|
// So that we can later remove it
|
||||||
|
args[0].handler = c[j];
|
||||||
|
|
||||||
if ( c[j].apply( this, args ) === false ) {
|
if ( c[j].apply( this, args ) === false ) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
|
Loading…
Reference in a new issue