diff --git a/src/event.js b/src/event.js index 8e756097c..363448b60 100644 --- a/src/event.js +++ b/src/event.js @@ -853,20 +853,21 @@ if ( !jQuery.support.changeBubbles ) { jQuery.event.special.change = { setup: function( data, namespaces ) { - // If this is a real input element, no need to fake change - if ( rformElems.test( this.nodeName ) ) { + if ( this.type === "file" ) { return false; } + for ( var type in changeFilters ) { jQuery.event.add( this, type + "._change", changeFilters[ type ] ); } + + return rformElems.test( this.nodeName ); }, teardown: function( namespaces ) { - if ( rformElems.test( this.nodeName ) ) { - return false; - } jQuery.event.remove( this, "._change" ); + + return rformElems.test( this.nodeName ); } }; } diff --git a/test/delegatetest.html b/test/delegatetest.html index 6938f7e1f..ef8ea6158 100644 --- a/test/delegatetest.html +++ b/test/delegatetest.html @@ -96,7 +96,7 @@ th, td {
-NOTE: Only IE supports beforeactivate/beforedeactivate; buttons do not support change events.
+NOTE: Only IE supports propertychange, beforeactivate, beforedeactivate; buttons do not support change events.
| '); - if ( api == "bind" ) { + if ( api == "on" ) { + $(this).find("input, button, select, textarea").each(function(){ + this["on"+type] = function(e){ e = $.event.fix(e||event); e.data = $cell; blinker.call(this, e); }; + }); + } else if ( api == "bind" ) { $(this).find("input, button, select, textarea").bind(type, $cell, blinker); } else { $(id+" input,"+id+" button,"+id+" select,"+id+" textarea").live(type, $cell, blinker); @@ -174,8 +178,6 @@ for ( var i=0; i < events.length; i++ ) { }); $("#changes tbody").append($row); } -// Buttons don't fire change events so show the cell as gray -$("#changes tbody").find("tr:eq(0), tr:eq(1)").find("td:eq(3)").css("background", "#eee"); jQuery.fn.blink = function(){ return this.css("backgroundColor","green").css("border","solid 3px green").delay(700).queue(function(next){ |