Equivalent of deprecated jQuery Toggle Event [duplicate] Equivalent of deprecated jQuery Toggle Event [duplicate] jquery jquery

Equivalent of deprecated jQuery Toggle Event [duplicate]


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 );


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);    });};