Fix an issue with adding multiple event handlers and reattaching the global event handler in IE

This commit is contained in:
Brandon Aaron 2007-04-22 16:34:23 +00:00
parent 03d2680259
commit 1d2faf36cf

View file

@ -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;
} }
}, },