Skip to content
Permalink
Browse files

Landed a fix for when a DOM element gets accidentally removed by anot…

…her live event handler. Thanks to Irae for the patches. Fixed #3820.
  • Loading branch information
jeresig committed Jan 10, 2009
1 parent 29bf601 commit b1018cad1256a7b9cc47e675b2a9e22c409b7aed
Showing with 27 additions and 5 deletions.
  1. +12 −4 src/event.js
  2. +15 −1 test/unit/event.js
@@ -560,15 +560,23 @@ jQuery.fn.extend({

function liveHandler( event ){
var check = RegExp("(^|\\.)" + event.type + "(\\.|$)"),
stop = true;
stop = true,
elems = [];

jQuery.each(jQuery.data(this, "events").live || [], function(i, fn){
if ( !event.isImmediatePropagationStopped() && check.test(fn.type) ) {
if ( check.test(fn.type) ) {
var elem = jQuery(event.target).closest(fn.data)[0];
if ( elem && fn.call(elem, event, fn.data) === false )
stop = false;
if ( elem )
elems.push({ elem: elem, fn: fn });
}
});

jQuery.each(elems, function(){
if ( !event.isImmediatePropagationStopped() &&
this.fn.call(this.elem, event, this.fn.data) === false )
stop = false;
});

return stop;
}

@@ -474,7 +474,7 @@ test("toggle(Function, Function, ...)", function() {
});

test(".live()/.die()", function() {
expect(36);
expect(38);

var submit = 0, div = 0, livea = 0, liveb = 0;

@@ -588,6 +588,20 @@ test(".live()/.die()", function() {

// Cleanup
jQuery("#nothiddendiv").die("foo", callback);

// Make sure we don't loose the target by DOM modifications
// after the bubble already reached the liveHandler
var livec = 0, elemDiv = jQuery("#nothiddendivchild").html('<span></span>').get(0);

jQuery("#nothiddendivchild").live("click", function(e){ jQuery("#nothiddendivchild").html(''); });
jQuery("#nothiddendivchild").live("click", function(e){ if(e.target) {livec++;} });

jQuery("#nothiddendiv span").click();
equals( jQuery("#nothiddendiv span").length, 0, "Verify that first handler occurred and modified the DOM." );
equals( livec, 1, "Verify that second handler occurred even with nuked target." );

// Cleanup
jQuery("#nothiddendivchild").die("click");
});

/*

0 comments on commit b1018ca

Please sign in to comment.
You can’t perform that action at this time.