Adding in backwards-compatiblity support for jQuery().bind/unbind/trigger - and immed...
authorjeresig <jeresig@gmail.com>
Wed, 6 Jan 2010 16:32:29 +0000 (11:32 -0500)
committerjeresig <jeresig@gmail.com>
Wed, 6 Jan 2010 16:32:29 +0000 (11:32 -0500)
src/event.js
test/unit/event.js

index fe98794..9abf838 100644 (file)
@@ -752,6 +752,7 @@ jQuery.each(["bind", "one"], function( i, name ) {
                        for ( var key in type ) {
                                this[ name ](key, data, type[key], fn);
                        }
+
                        return this;
                }
                
@@ -766,11 +767,17 @@ jQuery.each(["bind", "one"], function( i, name ) {
                        return fn.apply( this, arguments );
                }) : fn;
 
-               return type === "unload" && name !== "one" ?
-                       this.one( type, data, fn, thisObject ) :
-                       this.each(function() {
+               if ( type === "unload" && name !== "one" ) {
+                       this.one( type, data, fn, thisObject );
+
+               } else {
+                       // Deprecated: Please don't expect an empty jQuery set to bind to document
+                       (!this.selector && !this.context ? jQuery(document) : this).each(function() {
                                jQuery.event.add( this, type, handler, data );
                        });
+               }
+
+               return this;
        };
 });
 
@@ -784,14 +791,20 @@ jQuery.fn.extend({
                        return this;
                }
 
-               return this.each(function() {
+               // Deprecated: Please don't expect an empty jQuery set to bind to document
+               (!this.selector && !this.context ? jQuery(document) : this).each(function() {
                        jQuery.event.remove( this, type, fn );
                });
+
+               return this;
        },
        trigger: function( type, data ) {
-               return this.each(function() {
+               // Deprecated: Please don't expect an empty jQuery set to bind to document
+               (!this.selector && !this.context ? jQuery(document) : this).each(function() {
                        jQuery.event.trigger( type, data, this );
                });
+
+               return this;
        },
 
        triggerHandler: function( type, data ) {
index 8a9e48b..7111bb5 100644 (file)
@@ -118,6 +118,19 @@ test("bind(), trigger change on select", function() {
        }).trigger('change');
 });
 
+test("bind/unbind/trigger on empty jQuery set", function() {
+       expect(1);
+
+       jQuery().bind("test", function(){
+               equals( this, document, "Handler triggered and bound on document." );
+       });
+
+       jQuery().trigger("test");
+
+       jQuery().unbind("test");
+       jQuery().trigger("test");
+});
+
 test("bind(), namespaced events, cloned events", function() {
        expect(6);