Bug Tracker

Changeset 1773

Show
Ignore:
Timestamp:
04/24/07 21:48:52 (2 years ago)
Author:
brandon
Message:

Don't pass handler function as data for events + test (#1140)

Location:
trunk/jquery/src/event
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/jquery/src/event/event.js

    r1768 r1773  
    1515         
    1616        // if data is passed, bind to handler  
    17         if( data != undefined ) {  
     17        if( data != handler ) {  
    1818            // Create temporary function pointer to original handler  
    1919            var fn = handler;  
     
    5656                element.addEventListener(type, element.$handle, false); 
    5757            else if (element.attachEvent) 
    58                 element.attachEvent("on" + type, element.$handle, false); 
     58                element.attachEvent("on" + type, element.$handle); 
    5959        } 
    6060 
     
    102102                        element.removeEventListener(type, element.$handle, false); 
    103103                    else if (element.detachEvent) 
    104                         element.detachEvent("on" + type, element.$handle, false); 
     104                        element.detachEvent("on" + type, element.$handle); 
    105105                    ret = null; 
    106106                    delete events[type]; 
     
    275275    bind: function( type, data, fn ) { 
    276276        return this.each(function(){ 
    277             jQuery.event.add( this, type, fn || data, data ); 
     277            jQuery.event.add( this, type, fn || data, fn && data ); 
    278278        }); 
    279279    }, 
     
    310310                jQuery(this).unbind(event); 
    311311                return (fn || data).apply( this, arguments); 
    312             }, data); 
     312            }, fn && data); 
    313313        }); 
    314314    }, 
  • trunk/jquery/src/event/eventTest.js

    r1767 r1773  
    22 
    33test("bind()", function() { 
    4     expect(10); 
     4    expect(11); 
    55 
    66    var handler = function(event) { 
    77        ok( event.data, "bind() with data, check passed data exists" ); 
    88        ok( event.data.foo == "bar", "bind() with data, Check value of passed data" ); 
    9     } 
     9    }; 
    1010    $("#firstp").bind("click", {foo: "bar"}, handler).click(); 
    1111     
     
    1616        ok( data, "Check trigger data" ); 
    1717        ok( data.bar == "foo", "Check value of trigger data" ); 
    18     } 
     18    }; 
    1919    $("#firstp").bind("click", {foo: "bar"}, handler).trigger("click", [{bar: "foo"}]); 
     20     
     21    var handler = function(event) { 
     22        ok ( !event.data, "Check that no data is added to the event object" ); 
     23    }; 
     24    $("#firstp").unbind().bind("click", handler).trigger("click"); 
    2025     
    2126    // events don't work with iframes, see #939 
     
    4045    function selectOnChange(event) { 
    4146        equals( event.data, counter++, "Event.data is not a global event object" ); 
    42     } 
     47    }; 
    4348    $("select").each(function(i){ 
    4449        $(this).bind('change', i, selectOnChange); 
     
    9196        ok( b == "2", "check passed data" ); 
    9297        ok( c == "abc", "check passed data" ); 
    93     } 
     98    }; 
    9499    $("#firstp").bind("click", handler).trigger("click", [1, "2", "abc"]); 
    95100});