Skip to content
Permalink
Browse files
Making sure that you can bind multiple toggles to a single element wi…
…thout problems. Thanks to 'Mr Speaker' for the original patch. Fixes #5274.
  • Loading branch information
mrspeaker authored and jeresig committed Nov 11, 2009
1 parent 4b55e94 commit 5cb1163
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 3 deletions.
@@ -693,13 +693,14 @@ jQuery.fn.extend({

return this.click( jQuery.event.proxy( fn, function( event ) {
// Figure out which function to execute
this.lastToggle = ( this.lastToggle || 0 ) % i;
var lastToggle = ( jQuery.data( this, 'lastToggle' + fn.guid ) || 0 ) % i;
jQuery.data( this, 'lastToggle' + fn.guid, lastToggle + 1 );

// Make sure that clicks stop
event.preventDefault();

// and execute the function
return args[ this.lastToggle++ ].apply( this, arguments ) || false;
return args[ lastToggle ].apply( this, arguments ) || false;
}));
},

@@ -532,7 +532,7 @@ test("jQuery.Event.currentTarget", function(){
});

test("toggle(Function, Function, ...)", function() {
expect(11);
expect(16);

var count = 0,
fn1 = function(e) { count++; },
@@ -585,6 +585,22 @@ test("toggle(Function, Function, ...)", function() {
$div.unbind('click',fns[0]);
var data = jQuery.data( $div[0], 'events' );
ok( !data, "Unbinding one function from toggle unbinds them all");

// Test Multi-Toggles
var a = [], b = [];
$div = jQuery("<div/>");
$div.toggle(function(){ a.push(1); }, function(){ a.push(2); });
$div.click();
same( a, [1], "Check that a click worked." );

$div.toggle(function(){ b.push(1); }, function(){ b.push(2); });
$div.click();
same( a, [1,2], "Check that a click worked with a second toggle." );
same( b, [1], "Check that a click worked with a second toggle." );

$div.click();
same( a, [1,2,1], "Check that a click worked with a second toggle, second click." );
same( b, [1,2], "Check that a click worked with a second toggle, second click." );
});

test(".live()/.die()", function() {

0 comments on commit 5cb1163

Please sign in to comment.