Bug Tracker

Ticket #2655: handle-fix.diff

File handle-fix.diff, 2.1 kB (added by flesler, 9 months ago)

Changes

  • src/event.js

     
    240240        var val; 
    241241 
    242242        // 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 );  
    244244 
    245245        // 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 
    248249 
    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]; 
    251251 
    252252        for ( var j in handlers ) { 
    253253            var handler = handlers[j]; 
    254254            // Pass in a reference to the handler function itself 
    255255            // 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; 
    258258 
    259259            // 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        } 
    262263 
    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(); 
    271267        } 
    272268 
    273269        // Clean up added properties in IE to prevent memory leak 
     
    279275    }, 
    280276 
    281277    fix: function(event) { 
     278        if( event._fixed_ )//already fixed 
     279            return event; 
     280         
    282281        // store a copy of the original event object  
    283282        // and clone to set read-only properties 
    284283        var originalEvent = event; 
    285         event = jQuery.extend({}, originalEvent); 
     284        event = jQuery.extend({ _fixed_:true }, originalEvent); 
    286285         
    287286        // add preventDefault and stopPropagation since  
    288287        // they will not work on the clone