From a45372a4c5cfd33c4ff12b145bd79fec2fe0d382 Mon Sep 17 00:00:00 2001 From: jeresig Date: Sat, 27 Feb 2010 09:02:13 -0500 Subject: [PATCH] Adding in .bind(name, false), .unbind(name, false) support - an easy way to just stop bubbling and the default action on an element. Fixes #6188. --- src/ajax.js | 4 ++-- src/event.js | 19 ++++++++++++++++--- test/unit/event.js | 19 +++++++++++++++++++ 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/ajax.js b/src/ajax.js index 7b15a1d..08fa08b 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -13,8 +13,8 @@ var jsc = now(), jQuery.fn.extend({ load: function( url, params, callback ) { - if ( typeof url !== "string" ) { - return _load.call( this, url ); + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); // Don't do a request if no elements are being requested } else if ( !this.length ) { diff --git a/src/event.js b/src/event.js index 779c069..a7900c9 100644 --- a/src/event.js +++ b/src/event.js @@ -25,6 +25,10 @@ jQuery.event = { elem = window; } + if ( handler === false ) { + handler = returnFalse; + } + var handleObjIn, handleObj; if ( handler.handler ) { @@ -138,6 +142,10 @@ jQuery.event = { return; } + if ( handler === false ) { + handler = returnFalse; + } + var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, elemData = jQuery.data( elem ), events = elemData && elemData.events; @@ -830,7 +838,7 @@ jQuery.each(["bind", "one"], function( i, name ) { return this; } - if ( jQuery.isFunction( data ) ) { + if ( jQuery.isFunction( data ) || data === false ) { fn = data; data = undefined; } @@ -1072,8 +1080,13 @@ jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblcl // Handle event binding jQuery.fn[ name ] = function( data, fn ) { - return data || fn ? - this.bind( name, fn ? data : null, fn || data ) : + if ( fn == undefined ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.bind( name, data, fn ) : this.trigger( name ); }; diff --git a/test/unit/event.js b/test/unit/event.js index 6404900..a9c8815 100644 --- a/test/unit/event.js +++ b/test/unit/event.js @@ -384,6 +384,25 @@ test("bind(), with different this object", function() { ok( !jQuery.data(jQuery("#firstp")[0], "events"), "Event handler unbound when using different this object and data." ); }); +test("bind(name, false), unbind(name, false)", function() { + expect(3); + + var main = 0; + jQuery("#main").bind("click", function(e){ main++; }); + jQuery("#ap").trigger("click"); + equals( main, 1, "Verify that the trigger happened correctly." ); + + main = 0; + jQuery("#ap").bind("click", false); + jQuery("#ap").trigger("click"); + equals( main, 0, "Verify that no bubble happened." ); + + main = 0; + jQuery("#ap").unbind("click", false); + jQuery("#ap").trigger("click"); + equals( main, 1, "Verify that the trigger happened correctly." ); +}); + test("bind()/trigger()/unbind() on plain object", function() { expect( 2 ); -- 1.7.10.4