|
@@ -331,11 +331,10 @@ jQuery.event = { |
|
|
|
// Make a writable jQuery.Event from the native event object |
|
|
|
event = jQuery.event.fix( event ); |
|
|
|
|
|
|
|
var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, |
|
|
|
var i, j, ret, matched, handleObj, |
|
|
|
handlerQueue = [], |
|
|
|
args = core_slice.call( arguments ), |
|
|
|
handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], |
|
|
|
delegateCount = handlers.delegateCount, |
|
|
|
special = jQuery.event.special[ event.type ] || {}; |
|
|
|
|
|
|
|
// Use the fix-ed jQuery.Event rather than the (read-only) native event |
|
@@ -347,41 +346,8 @@ jQuery.event = { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// Determine handlers that should run if there are delegated events |
|
|
|
// Avoid non-left-click bubbling in Firefox (#3861) |
|
|
|
if ( delegateCount && !(event.button && event.type === "click") ) { |
|
|
|
|
|
|
|
for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { |
|
|
|
|
|
|
|
// Ignore clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764) |
|
|
|
if ( cur.disabled !== true || event.type !== "click" ) { |
|
|
|
selMatch = {}; |
|
|
|
matches = []; |
|
|
|
i = 0; |
|
|
|
for ( ; i < delegateCount; i++ ) { |
|
|
|
handleObj = handlers[ i ]; |
|
|
|
sel = handleObj.selector; |
|
|
|
|
|
|
|
if ( selMatch[ sel ] === undefined ) { |
|
|
|
selMatch[ sel ] = handleObj.needsContext ? |
|
|
|
jQuery( sel, this ).index( cur ) >= 0 : |
|
|
|
jQuery.find( sel, this, null, [ cur ] ).length; |
|
|
|
} |
|
|
|
if ( selMatch[ sel ] ) { |
|
|
|
matches.push( handleObj ); |
|
|
|
} |
|
|
|
} |
|
|
|
if ( matches.length ) { |
|
|
|
handlerQueue.push({ elem: cur, handlers: matches }); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Add the remaining (directly-bound) handlers |
|
|
|
if ( handlers.length > delegateCount ) { |
|
|
|
handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); |
|
|
|
} |
|
|
|
// Determine handlers |
|
|
|
handlerQueue = jQuery.event.handlers.call( this, event, handlers ); |
|
|
|
|
|
|
|
// Run delegates first; they may want to stop propagation beneath us |
|
|
|
i = 0; |
|
@@ -419,6 +385,50 @@ jQuery.event = { |
|
|
|
return event.result; |
|
|
|
}, |
|
|
|
|
|
|
|
handlers: function( event, handlers ) { |
|
|
|
var i, matches, sel, handleObj, |
|
|
|
handlerQueue = [], |
|
|
|
delegateCount = handlers.delegateCount, |
|
|
|
cur = event.target; |
|
|
|
|
|
|
|
// Find delegate handlers |
|
|
|
// Black-hole SVG <use> instance trees (#13180) |
|
|
|
// Avoid non-left-click bubbling in Firefox (#3861) |
|
|
|
if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { |
|
|
|
|
|
|
|
for ( ; cur != this; cur = cur.parentNode || this ) { |
|
|
|
|
|
|
|
// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) |
|
|
|
if ( cur.disabled !== true || event.type !== "click" ) { |
|
|
|
matches = []; |
|
|
|
for ( i = 0; i < delegateCount; i++ ) { |
|
|
|
handleObj = handlers[ i ]; |
|
|
|
sel = handleObj.selector; |
|
|
|
|
|
|
|
if ( matches[ sel ] === undefined ) { |
|
|
|
matches[ sel ] = handleObj.needsContext ? |
|
|
|
jQuery( sel, this ).index( cur ) >= 0 : |
|
|
|
jQuery.find( sel, this, null, [ cur ] ).length; |
|
|
|
} |
|
|
|
if ( matches[ sel ] ) { |
|
|
|
matches.push( handleObj ); |
|
|
|
} |
|
|
|
} |
|
|
|
if ( matches.length ) { |
|
|
|
handlerQueue.push({ elem: cur, handlers: matches }); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Add the remaining (directly-bound) handlers |
|
|
|
if ( delegateCount < handlers.length ) { |
|
|
|
handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); |
|
|
|
} |
|
|
|
|
|
|
|
return handlerQueue; |
|
|
|
}, |
|
|
|
|
|
|
|
// Includes some event props shared by KeyEvent and MouseEvent |
|
|
|
props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), |
|
|
|
|
|
|
0 comments on commit
b75b9ef