Skip to content
Permalink
Browse files

Expose jQuery.event.simulate for use by special event handlers.

  • Loading branch information...
dmethvin committed Sep 28, 2011
1 parent 8dda57f commit 9c4aaeb0a876235614bd0310517d2f86543c5f45
Showing with 23 additions and 23 deletions.
  1. +23 −23 src/event.js
@@ -586,6 +586,25 @@ jQuery.event = {
}
}
}
},

simulate: function( type, elem, event, bubble ) {
// Piggyback on a donor event to simulate a different one.
// Fake originalEvent to avoid donor's stopPropagation, but if the
// simulated event prevents default then we do the same on the donor.
var e = jQuery.extend(
new jQuery.Event(),
event,
{ type: type, isSimulated: true, originalEvent: {} }
);
if ( bubble ) {
jQuery.event.trigger( e, null, elem );
} else {
jQuery.event.handle.call( elem, e );
}
if ( e.isDefaultPrevented() ) {
event.preventDefault();
}
}
};

@@ -766,7 +785,7 @@ if ( !jQuery.support.submitBubbles ) {
jQuery.event.add( form, "submit._submit", function( event ) {
// Form was submitted, bubble the event up the tree
if ( this.parentNode ) {
simulate( "submit", this.parentNode, event, true );
jQuery.event.simulate( "submit", this.parentNode, event, true );
}
});
form._submit_attached = true;
@@ -807,7 +826,7 @@ if ( !jQuery.support.changeBubbles ) {
jQuery.event.add( this, "click._change", function( event ) {
if ( this._just_changed ) {
this._just_changed = false;
simulate( "change", this, event, true );
jQuery.event.simulate( "change", this, event, true );
}
});
}
@@ -820,7 +839,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 ) {
simulate( "change", this.parentNode, event, true );
jQuery.event.simulate( "change", this.parentNode, event, true );
}
});
elem._change_attached = true;
@@ -845,33 +864,14 @@ if ( !jQuery.support.changeBubbles ) {
};
}

function simulate( type, elem, event, bubble ) {
// Piggyback on a donor event to simulate a different one.
// Fake originalEvent to avoid donor's stopPropagation, but if the
// simulated event prevents default then we do the same on the donor.
var e = jQuery.extend(
new jQuery.Event(),
event,
{ type: type, isSimulated: true, originalEvent: {} }
);
if ( bubble ) {
jQuery.event.trigger( e, null, elem );
} else {
jQuery.event.handle.call( elem, e );
}
if ( e.isDefaultPrevented() ) {
event.preventDefault();
}
}

// Create "bubbling" focus and blur events
if ( !jQuery.support.focusinBubbles ) {
jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {

// Attach a single capturing handler while someone wants focusin/focusout
var attaches = 0,
handler = function( event ) {
simulate( fix, event.target, jQuery.event.fix( event ), true );
jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
};

jQuery.event.special[ fix ] = {

0 comments on commit 9c4aaeb

Please sign in to comment.
You can’t perform that action at this time.