Skip to content

Commit

Permalink
Make event.currentTarget the delegate node, always.
Browse files Browse the repository at this point in the history
This lets us use currentTarget for its intended use and avoids creating a non-standard delegateTarget property.
  • Loading branch information
dmethvin committed Oct 24, 2011
1 parent 9fabe20 commit d28ab68
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 14 deletions.
18 changes: 6 additions & 12 deletions src/event.js
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,7 @@ jQuery.event = {

// Use the fix-ed jQuery.Event rather than the (read-only) native event
args[0] = event;
event.currentTarget = this;

// Determine handlers that should run if there are delegated events
// Avoid disabled elements in IE (#6911) and non-left-click bubbling in Firefox (#3861)
Expand Down Expand Up @@ -447,21 +448,15 @@ jQuery.event = {
}
}

// Copy the remaining (bound) handlers in case they're changed
handlers = handlers.slice( delegateCount );
// Add the remaining (directly- bound) handlers
if ( handlers.length ) {
handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
}

// Run delegates first; they may want to stop propagation beneath us
event.delegateTarget = this;
for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
matched = handlerQueue[ i ];
dispatch( matched.elem, event, matched.matches, args );
}
delete event.delegateTarget;

// Run non-delegated handlers for this level
if ( handlers.length && !event.isPropagationStopped() ) {
dispatch( this, event, handlers, args );
}

return event.result;
},
Expand Down Expand Up @@ -613,7 +608,6 @@ function dispatch( target, event, handlers, args ) {
specialHandle = ( jQuery.event.special[ event.type ] || {} ).handle,
j, handleObj, ret;

event.currentTarget = target;
for ( j = 0; j < handlers.length && !event.isImmediatePropagationStopped(); j++ ) {
handleObj = handlers[ j ];

Expand Down Expand Up @@ -932,7 +926,7 @@ jQuery.fn.extend({
if ( one === 1 ) {
origFn = fn;
fn = function( event ) {
jQuery.event.remove( event.delegateTarget || this, event );
jQuery.event.remove( event.currentTarget || this, event );
return origFn.apply( this, arguments );
};
// Use same guid so caller can remove using origFn
Expand Down
4 changes: 2 additions & 2 deletions test/unit/event.js
Original file line number Diff line number Diff line change
Expand Up @@ -1476,7 +1476,7 @@ test(".live()/.die()", function() {
// Test this, target and currentTarget are correct
jQuery("span#liveSpan1").live("click", function(e){
equals( this.id, "liveSpan1", "Check the this within a live handler" );
equals( e.currentTarget.id, "liveSpan1", "Check the event.currentTarget within a live handler" );
equals( e.currentTarget, document, "Check the event.currentTarget within a live handler" );
equals( e.target.nodeName.toUpperCase(), "A", "Check the event.target within a live handler" );
});

Expand Down Expand Up @@ -2008,7 +2008,7 @@ test(".delegate()/.undelegate()", function() {
// Test this, target and currentTarget are correct
jQuery("#body").delegate("span#liveSpan1", "click", function(e){
equals( this.id, "liveSpan1", "Check the this within a delegate handler" );
equals( e.currentTarget.id, "liveSpan1", "Check the event.currentTarget within a delegate handler" );
equals( e.currentTarget, document.body, "Check the event.currentTarget within a delegate handler" );
equals( e.target.nodeName.toUpperCase(), "A", "Check the event.target within a delegate handler" );
});

Expand Down

0 comments on commit d28ab68

Please sign in to comment.