diff options
author | Dave Methvin <dave.methvin@gmail.com> | 2011-09-20 22:18:34 -0400 |
---|---|---|
committer | Dave Methvin <dave.methvin@gmail.com> | 2011-09-20 22:18:34 -0400 |
commit | b85f222df55418c733c9639e88c0cdd5111c585b (patch) | |
tree | d9d7410a0888ed3c8b003690ee99398ae435e0c0 /src/event.js | |
parent | 3bd7bed340f9077d39734ffce366ef2caeb9ce35 (diff) | |
download | jquery-b85f222df55418c733c9639e88c0cdd5111c585b.tar.gz jquery-b85f222df55418c733c9639e88c0cdd5111c585b.zip |
Don't fire change on an already-selected radio.
Thanks to Brandon Wallace (@bman654) for his code review. Also tweaks delegatetest.html output.
Diffstat (limited to 'src/event.js')
-rw-r--r-- | src/event.js | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/event.js b/src/event.js index 28716ad5f..443bf862c 100644 --- a/src/event.js +++ b/src/event.js @@ -764,12 +764,20 @@ if ( !jQuery.support.changeBubbles ) { setup: function() { if ( rformElems.test( this.nodeName ) ) { - // IE doesn't fire change on a checkbox/radio until blur; make it happen - // immediately by triggering our own change event now. - // Avoid double-firing change by eating it in special.change.handle. + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); jQuery.event.add( this, "click._change", function( event ) { - simulate( "change", this, event, true ); + if ( this._just_changed ) { + this._just_changed = false; + simulate( "change", this, event, true ); + } }); } return false; |