Ticket #2655: handle-fix.diff
File handle-fix.diff, 2.1 KB (added by , 14 years ago) |
---|
-
src/event.js
240 240 var val; 241 241 242 242 // Empty object is for triggered events with no data 243 event = jQuery.event.fix( event || window.event || {});243 event = arguments[0] = jQuery.event.fix( event || window.event ); 244 244 245 245 // Namespaced event handlers 246 var parts = event.type.split("."); 247 event.type = parts[0]; 246 var ns = event.type.split("."); 247 event.type = ns[0]; 248 ns = ns[1];//namespace 248 249 249 var handlers = jQuery.data(this, "events") && jQuery.data(this, "events")[event.type], args = Array.prototype.slice.call( arguments, 1 ); 250 args.unshift( event ); 250 var handlers = jQuery.data(this, "events") && jQuery.data(this, "events")[event.type]; 251 251 252 252 for ( var j in handlers ) { 253 253 var handler = handlers[j]; 254 254 // Pass in a reference to the handler function itself 255 255 // So that we can later remove it 256 args[0].handler = handler;257 args[0].data = handler.data;256 event.handler = handler; 257 event.data = handler.data; 258 258 259 259 // Filter the functions by class 260 if ( !parts[1] && !event.exclusive || handler.type == parts[1] ) { 261 var ret = handler.apply( this, args ); 260 if ( !ns && !event.exclusive || handler.type == ns ) 261 val = handler.apply( this, arguments ) !== false && val; 262 } 262 263 263 if ( val !== false ) 264 val = ret; 265 266 if ( ret === false ) { 267 event.preventDefault(); 268 event.stopPropagation(); 269 } 270 } 264 if ( val === false ) {//check after the loop 265 event.preventDefault(); 266 event.stopPropagation(); 271 267 } 272 268 273 269 // Clean up added properties in IE to prevent memory leak … … 279 275 }, 280 276 281 277 fix: function(event) { 278 if( event._fixed_ )//already fixed 279 return event; 280 282 281 // store a copy of the original event object 283 282 // and clone to set read-only properties 284 283 var originalEvent = event; 285 event = jQuery.extend({ }, originalEvent);284 event = jQuery.extend({ _fixed_:true }, originalEvent); 286 285 287 286 // add preventDefault and stopPropagation since 288 287 // they will not work on the clone