Follow-up to #8790. Delay the creation of a jQuery.Event until we know it will need to be triggered.
This commit is contained in:
parent
94ee3e9743
commit
235080e125
49
src/event.js
49
src/event.js
|
@ -275,7 +275,7 @@ jQuery.event = {
|
||||||
"changeData": true
|
"changeData": true
|
||||||
},
|
},
|
||||||
|
|
||||||
trigger: function( event, data, elem ) {
|
trigger: function( event, data, elem, onlyHandlers ) {
|
||||||
// Event object or event type
|
// Event object or event type
|
||||||
var type = event.type || event,
|
var type = event.type || event,
|
||||||
namespaces = [],
|
namespaces = [],
|
||||||
|
@ -294,7 +294,7 @@ jQuery.event = {
|
||||||
namespaces.sort();
|
namespaces.sort();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( jQuery.event.customEvent[ type ] && !jQuery.event.global[ type ] ) {
|
if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
|
||||||
// No jQuery handlers for this event type, and it can't have inline handlers
|
// No jQuery handlers for this event type, and it can't have inline handlers
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -309,30 +309,29 @@ jQuery.event = {
|
||||||
new jQuery.Event( type );
|
new jQuery.Event( type );
|
||||||
|
|
||||||
event.type = type;
|
event.type = type;
|
||||||
|
event.exclusive = exclusive;
|
||||||
event.namespace = namespaces.join(".");
|
event.namespace = namespaces.join(".");
|
||||||
event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
|
event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
|
||||||
event.exclusive = exclusive;
|
|
||||||
|
// triggerHandler() and global events don't bubble or run the default action
|
||||||
|
if ( onlyHandlers || !elem ) {
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
}
|
||||||
|
|
||||||
// Handle a global trigger
|
// Handle a global trigger
|
||||||
if ( !elem ) {
|
if ( !elem ) {
|
||||||
// Don't bubble custom events when global (to avoid too much overhead)
|
// TODO: Stop taunting the data cache; remove global events and always attach to document
|
||||||
event.stopPropagation();
|
jQuery.each( jQuery.cache, function() {
|
||||||
|
// internalKey variable is just used to make it easier to find
|
||||||
// Save some time, only trigger if we've ever bound an event for this type
|
// and potentially change this stuff later; currently it just
|
||||||
if ( jQuery.event.global[ type ] ) {
|
// points to jQuery.expando
|
||||||
// XXX This code smells terrible. event.js should not be directly
|
var internalKey = jQuery.expando,
|
||||||
// inspecting the data cache
|
internalCache = this[ internalKey ];
|
||||||
jQuery.each( jQuery.cache, function() {
|
if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
|
||||||
// internalKey variable is just used to make it easier to find
|
jQuery.event.trigger( event, data, internalCache.handle.elem );
|
||||||
// and potentially change this stuff later; currently it just
|
}
|
||||||
// points to jQuery.expando
|
});
|
||||||
var internalKey = jQuery.expando,
|
|
||||||
internalCache = this[ internalKey ];
|
|
||||||
if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
|
|
||||||
jQuery.event.trigger( event, data, internalCache.handle.elem );
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -404,6 +403,8 @@ jQuery.event = {
|
||||||
jQuery.event.triggered = undefined;
|
jQuery.event.triggered = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return event.result;
|
||||||
},
|
},
|
||||||
|
|
||||||
handle: function( event ) {
|
handle: function( event ) {
|
||||||
|
@ -975,11 +976,7 @@ jQuery.fn.extend({
|
||||||
|
|
||||||
triggerHandler: function( type, data ) {
|
triggerHandler: function( type, data ) {
|
||||||
if ( this[0] ) {
|
if ( this[0] ) {
|
||||||
var event = new jQuery.Event( type );
|
return jQuery.event.trigger( type, data, this[0], true );
|
||||||
event.preventDefault();
|
|
||||||
event.stopPropagation();
|
|
||||||
jQuery.event.trigger( event, data, this[0] );
|
|
||||||
return event.result;
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue