Équivalent de jQuery Toggle Event obsolète

La fonction Toggle Event de jQuery a été supprimée dans la version 1.9.

J’utilisais cette fonction comme suit:

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

Quel serait le meilleur moyen de reproduire cette fonctionnalité maintenant que Toggle Event est parti?

Chargez le MIGRATE et voyez le code ici

Voir mon post sur la même chose

Où est passé fn.toggle (gestionnaire (eventObject), gestionnaire (eventObject) …)?

J’ai suggéré qu’ils le renomment en fn.toggler au lieu de le supprimer

Voici le code – c’est un plugin jQuery autonome et peut être utilisé tel quel.

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

Version plus courte et non testée:

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

Cela fonctionne aussi bien.

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