Changeset 5276
- Timestamp:
- 04/22/08 05:23:55 (7 months ago)
- Files:
-
- 1 modified
-
trunk/jquery/src/event.js (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/jquery/src/event.js
r5273 r5276 42 42 var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}), 43 43 handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){ 44 // returned undefined or false45 var val;46 47 44 // Handle the second event of a trigger and when 48 45 // an event is called after a page has unloaded 49 if ( typeof jQuery == "undefined" || jQuery.event.triggered ) 50 return val; 51 52 val = jQuery.event.handle.apply(arguments.callee.elem, arguments); 53 54 return val; 46 if ( typeof jQuery != "undefined" && !jQuery.event.triggered ) 47 return jQuery.event.handle.apply(arguments.callee.elem, arguments); 55 48 }); 56 49 // Add elem as a property of the handle function … … 200 193 data[0].exclusive = true; 201 194 202 // Trigger the event 203 if ( jQuery.isFunction( jQuery.data(elem, "handle") ) ) 204 val = jQuery.data(elem, "handle").apply( elem, data ); 195 // Trigger the event, it is assumed that "handle" is a function 196 var handle = jQuery.data(elem, "handle"); 197 if ( handle ) 198 val = handle.apply( elem, data ); 205 199 206 200 // Handle triggering native .onfoo handlers (and on links since we don't call .click() for links) … … 238 232 handle: function(event) { 239 233 // returned undefined or false 240 var val; 241 242 // Empty object is for triggered events with no data 243 event = jQuery.event.fix( event || window.event || {} ); 234 var val, namespace, all, handlers; 235 236 event = arguments[0] = jQuery.event.fix( event || window.event ); 244 237 245 238 // Namespaced event handlers 246 var parts = event.type.split("."); 247 event.type = parts[0]; 248 249 var handlers = jQuery.data(this, "events") && jQuery.data(this, "events")[event.type], args = Array.prototype.slice.call( arguments, 1 ); 250 args.unshift( event ); 239 namespace = event.type.split("."); 240 event.type = namespace[0]; 241 namespace = namespace[1]; 242 all = !namespace && !event.exclusive; //cache this now, all = true means, any handler 243 244 handlers = ( jQuery.data(this, "events") || {} )[event.type]; 251 245 252 246 for ( var j in handlers ) { 253 247 var handler = handlers[j]; 254 // Pass in a reference to the handler function itself255 // So that we can later remove it256 args[0].handler = handler;257 args[0].data = handler.data;258 248 259 249 // Filter the functions by class 260 if ( !parts[1] && !event.exclusive || handler.type == parts[1] ) { 261 var ret = handler.apply( this, args ); 262 263 if ( val !== false ) 264 val = ret; 265 266 if ( ret === false ) { 267 event.preventDefault(); 268 event.stopPropagation(); 269 } 270 } 250 if ( all || handler.type == namespace ) { 251 // Pass in a reference to the handler function itself 252 // So that we can later remove it 253 event.handler = handler; 254 event.data = handler.data; 255 256 val = handler.apply( this, arguments ); 257 } 258 } 259 260 if ( val === false ) { 261 event.preventDefault(); 262 event.stopPropagation(); 271 263 } 272 264
