From 1d2faf36cf356bc09d3389ad6fce6ee520560f25 Mon Sep 17 00:00:00 2001 From: Brandon Aaron Date: Sun, 22 Apr 2007 16:34:23 +0000 Subject: [PATCH] Fix an issue with adding multiple event handlers and reattaching the global event handler in IE --- src/event/event.js | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/event/event.js b/src/event/event.js index 61bd4e88..3834fd65 100644 --- a/src/event/event.js +++ b/src/event/event.js @@ -38,22 +38,19 @@ jQuery.event = { // Init the element's event structure if (!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 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) { - element.$handle = function() { - jQuery.event.handle.apply(element, arguments); - }; - + if (!handlers) { + handlers = element.$events[type] = {}; + // And bind the global event handler to the element if (element.addEventListener) element.addEventListener(type, element.$handle, false); @@ -61,6 +58,9 @@ jQuery.event = { 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) if (!this.global[type]) this.global[type] = []; @@ -102,7 +102,7 @@ jQuery.event = { element.removeEventListener(type, element.$handle, false); else if (element.detachEvent) element.detachEvent("on" + type, element.$handle, false); - ret = element.$handle = null; + ret = null; delete events[type]; } } @@ -110,7 +110,7 @@ jQuery.event = { // Remove the expando if it's no longer used for ( ret in events ) break; if ( !ret ) - element.$events = null; + element.$handle = element.$events = null; } },