From: Dave Methvin Date: Thu, 8 Sep 2011 01:02:13 +0000 (-0400) Subject: Rework #1486 patch to avoid `try/catch` and look for hidden elements by `.offsetWidth... X-Git-Tag: 1.7b1~54 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=9aa553aa18e79989dfa002ae5a295f626951bdf5;p=jquery.git Rework #1486 patch to avoid `try/catch` and look for hidden elements by `.offsetWidth`. Unit test currently disabled due to Chrome bug. --- diff --git a/src/event.js b/src/event.js index fd61bca83..2b05d9a64 100644 --- a/src/event.js +++ b/src/event.js @@ -387,23 +387,21 @@ jQuery.event = { // Call a native DOM method on the target with the same name name as the event. // Can't use an .isFunction)() check here because IE6/7 fails that test. - // IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch. - try { - if ( ontype && elem[ type ] ) { - // Don't re-trigger an onFOO event when we call its FOO() method - old = elem[ ontype ]; - - if ( old ) { - elem[ ontype ] = null; - } + // IE<9 dies on focus to hidden element (#1486) + if ( ontype && elem[ type ] && elem.offsetWidth !== 0 ) { + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; - jQuery.event.triggered = type; - elem[ type ](); + if ( old ) { + elem[ ontype ] = null; } - } catch ( ieError ) {} - if ( old ) { - elem[ ontype ] = old; + jQuery.event.triggered = type; + elem[ type ](); + + if ( old ) { + elem[ ontype ] = old; + } } jQuery.event.triggered = undefined; diff --git a/test/unit/event.js b/test/unit/event.js index 5bc20801a..c00eb202c 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -34,6 +34,31 @@ test("bind(),live(),delegate() with non-null,defined data", function() { }); +/* +Removed because Chrome 13 snaps/crashes on this 2011-09-07 + +test("Handler changes and .trigger() order", function() { + expect(1); + + var markup = jQuery( + '

b

' + ).appendTo( "body" ); + + var path = ""; + jQuery( "b" ).parents().bind( "click", function(e){ + path += this.nodeName.toLowerCase() + " "; + // Should not change the event triggering order + $(this).parent().remove(); + }); + + markup.find( "b" ).trigger( "click" ); + + equals( path, "p div body html ", "Delivered all events" ) + + markup.remove(); +}); +*/ + test("bind(), with data", function() { expect(4); var handler = function(event) {