.unbind() without any arguments now also unbinds namespaced events. fixes #4609 and...
[jquery.git] / test / unit / event.js
index 1da9b59..4120af1 100644 (file)
@@ -194,6 +194,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() {
@@ -417,6 +422,21 @@ test("trigger(eventObject, [data], [fn])", function() {
        $parent.unbind().remove();
 });
 
+test("jQuery.Event.currentTarget", function(){
+       expect(1);
+       
+       var counter = 0,
+               $elem = jQuery('<button>a</button>').click(function(e){
+               equals( e.currentTarget, this, "Check currentTarget on "+(counter++?"native":"fake") +" event" );
+       });
+       
+       // Fake event
+       $elem.trigger('click');
+       
+       // Cleanup
+       $elem.unbind();
+});
+
 test("toggle(Function, Function, ...)", function() {
        expect(11);
        
@@ -474,7 +494,7 @@ test("toggle(Function, Function, ...)", function() {
 });
 
 test(".live()/.die()", function() {
-       expect(46);
+       expect(52);
 
        var submit = 0, div = 0, livea = 0, liveb = 0;
 
@@ -546,6 +566,24 @@ 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");
+
+
        // Verify that return false prevents default action
        jQuery("#anchor2").live("click", function(){ return false; });
        var hash = window.location.hash;
@@ -618,14 +656,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();
@@ -634,6 +672,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');
 });
 
 /*