Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Equivalent of deprecated jQuery Toggle Event [duplicate]

Tags:

jquery

toggle

jQuery's Toggle Event function has been removed as part of version 1.9.

I was using this function like so:

$('#example').toggle(function() {     do stuff }, function() {     do stuff }); 

What would be the best way to reproduce this functionality now Toggle Event has gone?

like image 218
AlecRust Avatar asked Jan 15 '13 12:01

AlecRust


2 Answers

Load the MIGRATE and see the code there

See my post about the same thing

Where has fn.toggle( handler(eventObject), handler(eventObject)...) gone?

I have suggested they rename it to fn.toggler instead of removing it

Here is the code - it is a self-contained jQuery plugin and can be used as is.

jQuery.fn.toggle = function( fn, fn2 ) {   // Don't mess with animation or css toggles   if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) {     return oldToggle.apply( this, arguments );   }   // migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated");   // Save reference to arguments for access in closure   var args = arguments,   guid = fn.guid || jQuery.guid++,   i = 0,   toggler = function( event ) {     // Figure out which function to execute     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[ lastToggle ].apply( this, arguments ) || false;   };   // link all the functions, so any of them can unbind this click handler   toggler.guid = guid;   while ( i < args.length ) {     args[ i++ ].guid = guid;   }   return this.click( toggler ); }; 

Shorter, non-tested version:

(function( $ ){   $.fn.toggler = function( fn, fn2 ) {     var args = arguments,guid = fn.guid || $.guid++,i=0,     toggler = function( event ) {       var lastToggle = ( $._data( this, "lastToggle" + fn.guid ) || 0 ) % i;       $._data( this, "lastToggle" + fn.guid, lastToggle + 1 );       event.preventDefault();       return args[ lastToggle ].apply( this, arguments ) || false;     };     toggler.guid = guid;     while ( i < args.length ) {       args[ i++ ].guid = guid;     }     return this.click( toggler );   }; })( jQuery ); 
like image 192
mplungjan Avatar answered Oct 08 '22 21:10

mplungjan


This also works well.

$.fn.toggleClick = function(){      var functions = arguments ;      return this.click(function(){             var iteration = $(this).data('iteration') || 0;             functions[iteration].apply(this, arguments);             iteration = (iteration + 1) % functions.length ;             $(this).data('iteration', iteration);     }); }; 
like image 43
Dionysios Arvanitis Avatar answered Oct 08 '22 21:10

Dionysios Arvanitis