aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Methvin <dave.methvin@gmail.com>2011-11-15 21:06:53 -0500
committerDave Methvin <dave.methvin@gmail.com>2011-11-15 21:06:53 -0500
commit80797f5805c335a818bda4237642fc4935bd77f6 (patch)
treee03691d04c3316a12ae2a0bc03be75f431984424
parentca8fc725ac8f590fff965e70c270c53ab0a6c0f3 (diff)
downloadjquery-80797f5805c335a818bda4237642fc4935bd77f6.tar.gz
jquery-80797f5805c335a818bda4237642fc4935bd77f6.zip
Fix #10798. Don't re-bubble trigger()ed events in IE.
Since .trigger() already bubbles the event, we don't have to work around the non-bubbling IE events for that case.
-rw-r--r--src/event.js8
-rw-r--r--test/delegatetest.html29
2 files changed, 29 insertions, 8 deletions
diff --git a/src/event.js b/src/event.js
index c9c891992..c6a711882 100644
--- a/src/event.js
+++ b/src/event.js
@@ -752,8 +752,8 @@ if ( !jQuery.support.submitBubbles ) {
form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
if ( form && !form._submit_attached ) {
jQuery.event.add( form, "submit._submit", function( event ) {
- // Form was submitted, bubble the event up the tree
- if ( this.parentNode ) {
+ // If form was submitted by the user, bubble the event up the tree
+ if ( this.parentNode && !event.isTrigger ) {
jQuery.event.simulate( "submit", this.parentNode, event, true );
}
});
@@ -793,7 +793,7 @@ if ( !jQuery.support.changeBubbles ) {
}
});
jQuery.event.add( this, "click._change", function( event ) {
- if ( this._just_changed ) {
+ if ( this._just_changed && !event.isTrigger ) {
this._just_changed = false;
jQuery.event.simulate( "change", this, event, true );
}
@@ -807,7 +807,7 @@ if ( !jQuery.support.changeBubbles ) {
if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
jQuery.event.add( elem, "change._change", function( event ) {
- if ( this.parentNode && !event.isSimulated ) {
+ if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
jQuery.event.simulate( "change", this.parentNode, event, true );
}
});
diff --git a/test/delegatetest.html b/test/delegatetest.html
index f6f6a35b4..5bf1c305a 100644
--- a/test/delegatetest.html
+++ b/test/delegatetest.html
@@ -129,11 +129,28 @@ th, td {
</tr>
</table>
+ <form id="autosub"><input type=submit name=subme /></form>
+
<script type='text/javascript'>
$("#version").text(version);
$("#fileversion").text($.fn.jquery);
+// Try an auto-submit, it should only fire once
+$(function(){
+ var triggered = false;
+ $("#autosub input").trigger("keypress");
+ $("body").on("submit", "#autosub", function( e ){
+ e.preventDefault();
+ e.stopPropagation();
+ if ( triggered ) {
+ alert("autosubmit FAIL");
+ }
+ triggered = true;
+ });
+ $("#autosub").submit().remove();
+});
+
// Events we want to track in row-order
var events = "bind-change live-change on-change bind-propertychange live-beforeactivate live-focusin bind-focus live-beforedeactivate live-focusout bind-blur live-click live-keydown".split(" "),
counter = 0;
@@ -179,10 +196,13 @@ for ( var i=0; i < events.length; i++ ) {
}
jQuery.fn.blink = function(){
- return this.css("backgroundColor","green").css("border","solid 3px green").delay(700).queue(function(next){
- jQuery(this).css("backgroundColor","");
- next();
- });
+ return this
+ .css("backgroundColor","green")
+ .text( (parseInt(this.text(), 10) || 0) + 1 )
+ .delay(700).queue(function(next){
+ jQuery(this).css("backgroundColor","#afa");
+ next();
+ });
};
jQuery.fn.addSubmitTest = function( id, prevent ) {
@@ -197,6 +217,7 @@ jQuery.fn.addSubmitTest = function( id, prevent ) {
$("#text_submit").addSubmitTest("#textSubmit", true);
$("#password_submit").addSubmitTest("#passwordSubmit", true);
$("#submit_submit").addSubmitTest("#submitSubmit", true);
+$("#prog_submit").addSubmitTest("#submitSubmit", true);
$(document).bind("submit", function(){
jQuery("#boundSubmit").blink();
});