Fix an issue with adding multiple event handlers and reattaching the global event handler in IE
This commit is contained in:
parent
03d2680259
commit
1d2faf36cf
|
@ -38,22 +38,19 @@ jQuery.event = {
|
||||||
// Init the element's event structure
|
// Init the element's event structure
|
||||||
if (!element.$events)
|
if (!element.$events)
|
||||||
element.$events = {};
|
element.$events = {};
|
||||||
|
|
||||||
|
if (!element.$handle)
|
||||||
|
element.$handle = function() {
|
||||||
|
jQuery.event.handle.apply(element, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
// Get the current list of functions bound to this event
|
// Get the current list of functions bound to this event
|
||||||
var handlers = element.$events[type];
|
var handlers = element.$events[type];
|
||||||
|
|
||||||
// Init the event handler queue
|
// Init the event handler queue
|
||||||
if (!handlers)
|
if (!handlers) {
|
||||||
handlers = element.$events[type] = {};
|
handlers = element.$events[type] = {};
|
||||||
|
|
||||||
// Add the function to the element's handler list
|
|
||||||
handlers[handler.guid] = handler;
|
|
||||||
|
|
||||||
if (!element.$handle) {
|
|
||||||
element.$handle = function() {
|
|
||||||
jQuery.event.handle.apply(element, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
// And bind the global event handler to the element
|
// And bind the global event handler to the element
|
||||||
if (element.addEventListener)
|
if (element.addEventListener)
|
||||||
element.addEventListener(type, element.$handle, false);
|
element.addEventListener(type, element.$handle, false);
|
||||||
|
@ -61,6 +58,9 @@ jQuery.event = {
|
||||||
element.attachEvent("on" + type, element.$handle, false);
|
element.attachEvent("on" + type, element.$handle, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add the function to the element's handler list
|
||||||
|
handlers[handler.guid] = handler;
|
||||||
|
|
||||||
// Remember the function in a global list (for triggering)
|
// Remember the function in a global list (for triggering)
|
||||||
if (!this.global[type])
|
if (!this.global[type])
|
||||||
this.global[type] = [];
|
this.global[type] = [];
|
||||||
|
@ -102,7 +102,7 @@ jQuery.event = {
|
||||||
element.removeEventListener(type, element.$handle, false);
|
element.removeEventListener(type, element.$handle, false);
|
||||||
else if (element.detachEvent)
|
else if (element.detachEvent)
|
||||||
element.detachEvent("on" + type, element.$handle, false);
|
element.detachEvent("on" + type, element.$handle, false);
|
||||||
ret = element.$handle = null;
|
ret = null;
|
||||||
delete events[type];
|
delete events[type];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -110,7 +110,7 @@ jQuery.event = {
|
||||||
// Remove the expando if it's no longer used
|
// Remove the expando if it's no longer used
|
||||||
for ( ret in events ) break;
|
for ( ret in events ) break;
|
||||||
if ( !ret )
|
if ( !ret )
|
||||||
element.$events = null;
|
element.$handle = element.$events = null;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue