Bug Tracker

Ticket #964: event.diff

File event.diff, 2.0 kB (added by brandon, 2 years ago)

Patch and test

  • jquery/src/event/event.js

     
    5555 
    5656    // Detach an event or set of events from an element 
    5757    remove: function(element, type, handler) { 
    58         if (element.$events) 
    59             if ( type && type.type ) 
    60                 delete element.$events[ type.type ][ type.handler.guid ]; 
    61             else if (type && element.$events[type]) 
     58        if (element.$events) { 
     59            var i,j,k; 
     60            if ( type && type.type ) { // type is actually an event object here 
     61                handler = type.handler; 
     62                type    = type.type; 
     63            } 
     64             
     65            if (type && element.$events[type]) 
     66                // remove the given handler for the given type 
    6267                if ( handler ) 
    6368                    delete element.$events[type][handler.guid]; 
     69                     
     70                // remove all handlers for the given type 
    6471                else 
    65                     for ( var i in element.$events[type] ) 
     72                    for ( i in element.$events[type] ) 
    6673                        delete element.$events[type][i]; 
     74                         
     75            // remove all handlers       
    6776            else 
    68                 for ( var j in element.$events ) 
     77                for ( j in element.$events ) 
    6978                    this.remove( element, j ); 
     79             
     80            // remove event handler if no more handlers exist 
     81            for ( k in element.$events[type] ) 
     82                if (k) { 
     83                    k = true; 
     84                    break; 
     85                } 
     86            if (!k) element["on" + type] = null; 
     87        } 
    7088    }, 
    7189 
    7290    trigger: function(type, data, element) { 
  • jquery/src/event/eventTest.js

     
    1515}); 
    1616 
    1717test("unbind(event)", function() { 
    18     expect(3); 
     18    expect(4); 
    1919    var el = $("#firstp"); 
    2020    el.click(function() { 
    2121        ok( true, "Fake normal bind" ); 
     
    2525        ok( true, "Fake onebind" ); 
    2626    }); 
    2727    el.click().click(); 
     28     
     29    el.click(function() { return; }); 
     30    el.unbind('click'); 
     31    ok( !el[0].onclick, "Handler is removed" ); // Bug #964 
    2832}); 
    2933 
    3034test("trigger(event, [data]", function() {