Added logic for not using getElementsByClassName in different failure states. Fixes...
[jquery.git] / test / unit / event.js
index e12f3b7..4d2b0aa 100644 (file)
@@ -474,7 +474,7 @@ test("toggle(Function, Function, ...)", function() {
 });
 
 test(".live()/.die()", function() {
-       expect(36);
+       expect(42);
 
        var submit = 0, div = 0, livea = 0, liveb = 0;
 
@@ -533,6 +533,15 @@ test(".live()/.die()", function() {
        equals( livea, 5, "die Click on inner div" );
        equals( liveb, 2, "die Click on inner div" );
 
+       // Make sure that stopPropgation doesn't stop live events
+       jQuery("div#nothiddendivchild").live("click", function(e){ liveb++; e.stopPropagation(); });
+       jQuery("div#nothiddendivchild").trigger("click");
+       equals( submit, 1, "stopPropagation Click on inner div" );
+       equals( div, 6, "stopPropagation Click on inner div" );
+       equals( livea, 6, "stopPropagation Click on inner div" );
+       equals( liveb, 3, "stopPropagation Click on inner div" );
+
+       jQuery("div#nothiddendivchild").die("click");
        jQuery("div#nothiddendiv").die("click");
        jQuery("div").die("click");
        jQuery("div").die("submit");
@@ -588,6 +597,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");
 });
 
 /*