Made it so that you can pass in an event object to the trigger data args and it'll...
authorJohn Resig <jeresig@gmail.com>
Thu, 30 Aug 2007 16:34:34 +0000 (16:34 +0000)
committerJohn Resig <jeresig@gmail.com>
Thu, 30 Aug 2007 16:34:34 +0000 (16:34 +0000)
src/event/event.js
src/event/eventTest.js

index 3c5a119..3b3294b 100644 (file)
@@ -134,10 +134,13 @@ jQuery.event = {
 
                // Handle triggering a single element
                } else {
-                       var val, ret, fn = jQuery.isFunction( element[ type ] || null );
+                       var val, ret, fn = jQuery.isFunction( element[ type ] || null ),
+                               // Check to see if we need to provide a fake event, or not
+                               evt = !data[0] || !data[0].preventDefault;
                        
                        // Pass along a fake event
-                       data.unshift( this.fix({ type: type, target: element }) );
+                       if ( evt )
+                               data.unshift( this.fix({ type: type, target: element }) );
 
                        // Trigger the event
                        if ( jQuery.isFunction( element.$handle ) )
@@ -147,6 +150,10 @@ jQuery.event = {
                        if ( !fn && element["on"+type] && element["on"+type].apply( element, data ) === false )
                                val = false;
 
+                       // Extra functions don't get the custom event object
+                       if ( evt )
+                               data.shift();
+
                        // Handle triggering of extra function
                        if ( extra && extra.apply( element, data ) === false )
                                val = false;
index 84c7b97..7ae9e6d 100644 (file)
@@ -93,8 +93,8 @@ test("unbind(event)", function() {
        ok( !el[0].$events, "Removed the events expando after all handlers are unbound." );
 });
 
-test("trigger(event, [data]", function() {
-       expect(28);
+test("trigger(event, [data], [fn])", function() {
+       expect(40);
 
        var handler = function(event, a, b, c) {
                equals( event.type, "click", "check passed data" );
@@ -104,6 +104,13 @@ test("trigger(event, [data]", function() {
                return "test";
        };
 
+       var handler2 = function(a, b, c) {
+               equals( a, 1, "check passed data" );
+               equals( b, "2", "check passed data" );
+               equals( c, "abc", "check passed data" );
+               return "test2";
+       };
+
        // Simulate a "native" click
        $("#firstp")[0].click = function(){
                ok( true, "Native call was triggered" );
@@ -114,8 +121,8 @@ test("trigger(event, [data]", function() {
        $("#firstp").bind("click", handler).trigger("click", [1, "2", "abc"]);
 
        // Triggers handlers, native, and extra fn
-       // Triggers 9
-       $("#firstp").trigger("click", [1, "2", "abc"], handler);
+       // Triggers 8
+       $("#firstp").trigger("click", [1, "2", "abc"], handler2);
 
        // Simulate a "native" click
        $("#firstp")[0].click = function(){
@@ -123,12 +130,23 @@ test("trigger(event, [data]", function() {
        };
 
        // Trigger only the handlers (no native)
-       // Triggers 4
+       // Triggers 5
        equals( $("#firstp").triggerHandler("click", [1, "2", "abc"]), "test", "Verify handler response" );
 
        // Trigger only the handlers (no native) and extra fn
        // Triggers 8
-       equals( $("#firstp").triggerHandler("click", [1, "2", "abc"], handler), "test", "Verify handler response" );
+       equals( $("#firstp").triggerHandler("click", [1, "2", "abc"], handler2), "test", "Verify handler response" );
+
+       // Build fake click event to pass in
+       var eventObj = jQuery.event.fix({ type: "click", target: document.body });
+
+       // Trigger only the handlers (no native), with external event obj
+       // Triggers 5
+       equals( $("#firstp").triggerHandler("foo", [eventObj, 1, "2", "abc"]), "test", "Verify handler response" );
+
+       // Trigger only the handlers (no native) and extra fn, with external event obj
+       // Triggers 9
+       equals( $("#firstp").triggerHandler("foo", [eventObj, 1, "2", "abc"], handler), "test", "Verify handler response" );
 });
 
 test("toggle(Function, Function)", function() {