live event handlers now receive data from trigger, fixes #4532, thanks nbubna
[jquery.git] / test / unit / event.js
index f111c07..dea17a1 100644 (file)
@@ -47,15 +47,11 @@ test("bind(), no data", function() {
 
 test("bind(), iframes", function() {
        // events don't work with iframes, see #939 - this test fails in IE because of contentDocument
-       // var doc = document.getElementById("iframe").contentDocument;
-       // 
-       // doc.body.innerHTML = "<input type='text'/>";
-       //
-       // var input = doc.getElementsByTagName("input")[0];
-       //
-       // jQuery(input).bind("click",function() {
-       //      ok( true, "Binding to element inside iframe" );
-       // }).click();
+       var doc = jQuery("#loadediframe").contents();
+       
+       jQuery("div", doc).bind("click", function() {
+               ok( true, "Binding to element inside iframe" );
+       }).click().unbind('click');
 });
 
 test("bind(), trigger change on select", function() {
@@ -194,6 +190,11 @@ test("unbind(type)", function() {
        $elem.bind('error error2',error)
                 .unbind('error error2')
                 .trigger('error').triggerHandler('error2');
+       
+       message = "unbind without a type or handler";
+       $elem.bind("error error2.test",error)
+                .unbind()
+                .trigger("error").triggerHandler("error2");
 });
 
 test("unbind(eventObject)", function() {
@@ -418,7 +419,7 @@ test("trigger(eventObject, [data], [fn])", function() {
 });
 
 test("jQuery.Event.currentTarget", function(){
-       expect(2);
+       expect(1);
        
        var counter = 0,
                $elem = jQuery('<button>a</button>').click(function(e){
@@ -427,8 +428,6 @@ test("jQuery.Event.currentTarget", function(){
        
        // Fake event
        $elem.trigger('click');
-       // Native event (#4033)
-       triggerEvent( $elem[0], 'click' );
        
        // Cleanup
        $elem.unbind();
@@ -491,7 +490,7 @@ test("toggle(Function, Function, ...)", function() {
 });
 
 test(".live()/.die()", function() {
-       expect(46);
+       expect(54);
 
        var submit = 0, div = 0, livea = 0, liveb = 0;
 
@@ -563,6 +562,31 @@ test(".live()/.die()", function() {
        jQuery("div").die("click");
        jQuery("div").die("submit");
 
+       // Test binding with a different context
+       var clicked = 0, container = jQuery('#main')[0];
+       jQuery("#foo", container).live("click", function(e){ clicked++; });
+       jQuery("div").trigger('click');
+       jQuery("#foo").trigger('click');
+       jQuery("#main").trigger('click');
+       jQuery("body").trigger('click');
+       equals( clicked, 2, "live with a context" );
+
+       // Make sure the event is actually stored on the context
+       ok( jQuery.data(container, "events").live, "live with a context" );
+
+       // Test unbinding with a different context
+       jQuery("#foo", container).die("click");
+       jQuery("#foo").trigger('click');
+       equals( clicked, 2, "die with a context");
+
+       // Test binding with event data
+       jQuery("#foo").live("click", true, function(e){ equals( e.data, true, "live with event data" ); });
+       jQuery("#foo").trigger("click").die("click");
+
+       // Test binding with trigger data
+       jQuery("#foo").live("click", function(e, data){ equals( data, true, "live with trigger data" ); });
+       jQuery("#foo").trigger("click", true).die("click");
+
        // Verify that return false prevents default action
        jQuery("#anchor2").live("click", function(){ return false; });
        var hash = window.location.hash;
@@ -635,14 +659,14 @@ test(".live()/.die()", function() {
        
        // bind one pair in one order
        jQuery('span#liveSpan1 a').live('click', function(){ lived++; return false; });
-       jQuery('span#liveSpan1').live('click', function(){      livee++; });
+       jQuery('span#liveSpan1').live('click', function(){ livee++; });
 
        jQuery('span#liveSpan1 a').click();
        equals( lived, 1, "Verify that only one first handler occurred." );
        equals( livee, 0, "Verify that second handler don't." );
 
        // and one pair in inverse
-       jQuery('#liveHandlerOrder span#liveSpan2').live('click', function(){    livee++; });
+       jQuery('#liveHandlerOrder span#liveSpan2').live('click', function(){ livee++; });
        jQuery('#liveHandlerOrder span#liveSpan2 a').live('click', function(){ lived++; return false; });
 
        jQuery('span#liveSpan2 a').click();
@@ -651,6 +675,17 @@ test(".live()/.die()", function() {
        
        // Cleanup
        jQuery("span#liveSpan1 a, span#liveSpan1, span#liveSpan2 a, span#liveSpan2").die("click");
+       
+       // Test this, target and currentTarget are correct
+       jQuery('span#liveSpan1').live('click', function(e){ 
+               equals( this.id, 'liveSpan1', 'Check the this within a live handler' );
+               equals( e.currentTarget.id, 'liveSpan1', 'Check the event.currentTarget within a live handler' );
+               equals( e.target.nodeName.toUpperCase(), 'A', 'Check the event.target within a live handler' );
+       });
+       
+       jQuery('span#liveSpan1 a').click();
+       
+       jQuery('span#liveSpan1').die('click');
 });
 
 /*