Bug Tracker

Ticket #2655: handle-fix.diff

File handle-fix.diff, 2.1 KB (added by flesler, 14 years 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