Commit 1d2faf36 authored by Brandon Aaron's avatar Brandon Aaron

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

parent 03d26802
...@@ -38,22 +38,19 @@ jQuery.event = { ...@@ -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 = {};
// Get the current list of functions bound to this event
var handlers = element.$events[type];
// Init the event handler queue
if (!handlers)
handlers = element.$events[type] = {};
// Add the function to the element's handler list
handlers[handler.guid] = handler;
if (!element.$handle) { if (!element.$handle)
element.$handle = function() { element.$handle = function() {
jQuery.event.handle.apply(element, arguments); jQuery.event.handle.apply(element, arguments);
}; };
// Get the current list of functions bound to this event
var handlers = element.$events[type];
// Init the event handler queue
if (!handlers) {
handlers = element.$events[type] = {};
// 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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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;
} }
}, },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment