aboutsummaryrefslogtreecommitdiffstats
path: root/src/event.js
diff options
context:
space:
mode:
authorDave Methvin <dave.methvin@gmail.com>2011-09-20 22:18:34 -0400
committerDave Methvin <dave.methvin@gmail.com>2011-09-20 22:18:34 -0400
commitb85f222df55418c733c9639e88c0cdd5111c585b (patch)
treed9d7410a0888ed3c8b003690ee99398ae435e0c0 /src/event.js
parent3bd7bed340f9077d39734ffce366ef2caeb9ce35 (diff)
downloadjquery-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.js16
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;