]> source.dussan.org Git - jquery.git/commitdiff
Fix #10798. Don't re-bubble trigger()ed events in IE.
authorDave Methvin <dave.methvin@gmail.com>
Wed, 16 Nov 2011 02:06:53 +0000 (21:06 -0500)
committerDave Methvin <dave.methvin@gmail.com>
Wed, 16 Nov 2011 02:06:53 +0000 (21:06 -0500)
Since .trigger() already bubbles the event, we don't have to work around the non-bubbling IE events for that case.

src/event.js
test/delegatetest.html

index c9c891992dce844067c10b81110bfbfed8fe39c6..c6a711882f281437c217788dc41ae24745572936 100644 (file)
@@ -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 );
                                                }
                                        });
index f6f6a35b49971a4cb9968c5bee027f45874249e1..5bf1c305ad1dbff921d39aa0809f4be813d2ffa7 100644 (file)
@@ -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();
 });