Ticket #2655: handle-fix.2.diff
File handle-fix.2.diff, 3.1 KB (added by , 14 years ago) |
---|
-
src/event.js
41 41 // Init the element's event structure 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 57 50 // This is to prevent a memory leak with non-native … … 240 233 var val; 241 234 242 235 // Empty object is for triggered events with no data 243 event = jQuery.event.fix( event || window.event || {});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]; 239 var ns = event.type.split("."); 240 event.type = ns[0]; 241 ns = ns[1];//namespace 248 242 249 var handlers = jQuery.data(this, "events") && jQuery.data(this, "events")[event.type], args = Array.prototype.slice.call( arguments, 1 ); 250 args.unshift( event ); 243 var handlers = jQuery.data(this, "events") && jQuery.data(this, "events")[event.type]; 251 244 252 245 for ( var j in handlers ) { 253 246 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 247 259 248 // Filter the functions by class 260 if ( !parts[1] && !event.exclusive || handler.type == parts[1] ) { 261 var ret = handler.apply( this, args ); 249 if ( !ns && !event.exclusive || handler.type == ns ) { 262 250 263 if ( val !== false ) 264 val = ret; 265 266 if ( ret === false ) { 267 event.preventDefault(); 268 event.stopPropagation(); 269 } 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 ) !== false && val; 270 257 } 271 258 } 272 259 260 if ( val === false ) {//check after the loop 261 event.preventDefault(); 262 event.stopPropagation(); 263 } 264 273 265 // Clean up added properties in IE to prevent memory leak 274 266 if (jQuery.browser.msie) 275 267 event.target = event.preventDefault = event.stopPropagation = … … 279 271 }, 280 272 281 273 fix: function(event) { 274 if( event._fixed_ )//already fixed 275 return event; 276 282 277 // store a copy of the original event object 283 278 // and clone to set read-only properties 284 279 var originalEvent = event; 285 event = jQuery.extend({ }, originalEvent);280 event = jQuery.extend({ _fixed_:true }, originalEvent); 286 281 287 282 // add preventDefault and stopPropagation since 288 283 // they will not work on the clone