Changeset 4173
- Timestamp:
- 12/16/07 04:09:53 (1 year ago)
- Files:
-
- 1 modified
-
trunk/jquery/src/event.js (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/jquery/src/event.js
r4171 r4173 8 8 // Bind an event to an element 9 9 // Original by Dean Edwards 10 add: function(elem ent, types, handler, data) {11 if ( elem ent.nodeType == 3 || element.nodeType == 8 )10 add: function(elem, types, handler, data) { 11 if ( elem.nodeType == 3 || elem.nodeType == 8 ) 12 12 return; 13 13 14 14 // For whatever reason, IE has trouble passing the window object 15 15 // around, causing it to be cloned in the process 16 if ( jQuery.browser.msie && elem ent.setInterval != undefined )17 elem ent= window;16 if ( jQuery.browser.msie && elem.setInterval != undefined ) 17 elem = window; 18 18 19 19 // Make sure that the function being executed has a unique ID … … 40 40 41 41 // Init the element's event structure 42 var events = jQuery.data(elem ent, "events") || jQuery.data(element, "events", {}),43 handle = jQuery.data(elem ent, "handle") || jQuery.data(element, "handle", function(){42 var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}), 43 handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){ 44 44 // returned undefined or false 45 45 var val; … … 50 50 return val; 51 51 52 val = jQuery.event.handle.apply(elem ent, arguments);52 val = jQuery.event.handle.apply(elem, arguments); 53 53 54 54 return val; … … 73 73 // Only use addEventListener/attachEvent if the special 74 74 // events handler returns false 75 if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem ent) === false ) {75 if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem) === false ) { 76 76 // Bind the global event handler to the element 77 if (elem ent.addEventListener)78 elem ent.addEventListener(type, handle, false);79 else if (elem ent.attachEvent)80 elem ent.attachEvent("on" + type, handle);77 if (elem.addEventListener) 78 elem.addEventListener(type, handle, false); 79 else if (elem.attachEvent) 80 elem.attachEvent("on" + type, handle); 81 81 } 82 82 } … … 94 94 95 95 // Detach an event or set of events from an element 96 remove: function(elem ent, types, handler) {96 remove: function(elem, types, handler) { 97 97 // don't do events on text and comment nodes 98 if ( elem ent.nodeType == 3 || element.nodeType == 8 )98 if ( elem.nodeType == 3 || elem.nodeType == 8 ) 99 99 return; 100 100 101 var events = jQuery.data(elem ent, "events"), ret, index;101 var events = jQuery.data(elem, "events"), ret, index; 102 102 103 103 if ( events ) { … … 105 105 if ( !types ) 106 106 for ( var type in events ) 107 this.remove( elem ent, type );107 this.remove( elem, type ); 108 108 else { 109 109 // types is actually an event object here … … 135 135 for ( ret in events[type] ) break; 136 136 if ( !ret ) { 137 if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(this, elem ent) === false ) {138 if (elem ent.removeEventListener)139 elem ent.removeEventListener(type, jQuery.data(element, "handle"), false);140 else if (elem ent.detachEvent)141 elem ent.detachEvent("on" + type, jQuery.data(element, "handle"));137 if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(this, elem) === false ) { 138 if (elem.removeEventListener) 139 elem.removeEventListener(type, jQuery.data(elem, "handle"), false); 140 else if (elem.detachEvent) 141 elem.detachEvent("on" + type, jQuery.data(elem, "handle")); 142 142 } 143 143 ret = null; … … 151 151 for ( ret in events ) break; 152 152 if ( !ret ) { 153 jQuery.removeData( elem ent, "events" );154 jQuery.removeData( elem ent, "handle" );153 jQuery.removeData( elem, "events" ); 154 jQuery.removeData( elem, "handle" ); 155 155 } 156 156 } 157 157 }, 158 158 159 trigger: function(type, data, elem ent, donative, extra) {159 trigger: function(type, data, elem, donative, extra) { 160 160 // Clone the incoming data, if any 161 161 data = jQuery.makeArray(data || []); 162 162 163 163 // Handle a global trigger 164 if ( !elem ent) {164 if ( !elem ) { 165 165 // Only trigger if we've ever bound an event for it 166 166 if ( this.global[type] ) … … 170 170 } else { 171 171 // don't do events on text and comment nodes 172 if ( elem ent.nodeType == 3 || element.nodeType == 8 )172 if ( elem.nodeType == 3 || elem.nodeType == 8 ) 173 173 return undefined; 174 174 175 var val, ret, fn = jQuery.isFunction( elem ent[ type ] || null ),175 var val, ret, fn = jQuery.isFunction( elem[ type ] || null ), 176 176 // Check to see if we need to provide a fake event, or not 177 177 event = !data[0] || !data[0].preventDefault; … … 179 179 // Pass along a fake event 180 180 if ( event ) 181 data.unshift( this.fix({ type: type, target: elem ent}) );181 data.unshift( this.fix({ type: type, target: elem }) ); 182 182 183 183 // Enforce the right trigger type … … 185 185 186 186 // Trigger the event 187 if ( jQuery.isFunction( jQuery.data(elem ent, "handle") ) )188 val = jQuery.data(elem ent, "handle").apply( element, data );187 if ( jQuery.isFunction( jQuery.data(elem, "handle") ) ) 188 val = jQuery.data(elem, "handle").apply( elem, data ); 189 189 190 190 // Handle triggering native .onfoo handlers 191 if ( !fn && elem ent["on"+type] && element["on"+type].apply( element, data ) === false )191 if ( !fn && elem["on"+type] && elem["on"+type].apply( elem, data ) === false ) 192 192 val = false; 193 193 … … 199 199 if ( extra ) { 200 200 // call the extra function and tack the current return value on the end for possible inspection 201 var ret = extra.apply( elem ent, data.concat( val ) );201 var ret = extra.apply( elem, data.concat( val ) ); 202 202 // if anything is returned, give it precedence and have it overwrite the previous value 203 203 if (ret !== undefined) … … 206 206 207 207 // Trigger the native events (except for clicks on links) 208 if ( fn && donative !== false && val !== false && !(jQuery.nodeName(elem ent, 'a') && type == "click") ) {208 if ( fn && donative !== false && val !== false && !(jQuery.nodeName(elem, 'a') && type == "click") ) { 209 209 this.triggered = true; 210 210 try { 211 elem ent[ type ]();211 elem[ type ](); 212 212 // prevent IE from throwing an error for some hidden elements 213 213 } catch (e) {} … … 490 490 // Checks if an event happened on an element within another element 491 491 // Used in jQuery.event.special.mouseenter and mouseleave handlers 492 var withinElement = function(event, elem ent) {492 var withinElement = function(event, elem) { 493 493 // Check if mouse(over|out) are still within the same parent element 494 494 var parent = event.relatedTarget; 495 495 // Traverse up the tree 496 while ( parent && parent != elem ent ) try { parent = parent.parentNode } catch(error) { parent = element; };496 while ( parent && parent != elem ) try { parent = parent.parentNode } catch(error) { parent = elem; }; 497 497 // Return true if we actually just moused on to a sub-element 498 return parent == elem ent;498 return parent == elem; 499 499 }; 500 500
