jQuery 的Toggle Event功能已作为 1.9 版的一部分被删除。
我像这样使用这个功能:
$('#example').toggle(function() {
do stuff
}, function() {
do stuff
});
现在 Toggle Event 消失了,重现此功能的最佳方式是什么?
jQuery 的Toggle Event功能已作为 1.9 版的一部分被删除。
我像这样使用这个功能:
$('#example').toggle(function() {
do stuff
}, function() {
do stuff
});
现在 Toggle Event 消失了,重现此功能的最佳方式是什么?
加载 MIGRATE 并查看那里的代码
看到我的帖子关于同样的事情
fn.toggle(handler(eventObject), handler(eventObject)...) 去哪儿了?
我建议他们将其重命名为fn.toggler而不是删除它
这是代码 - 它是一个独立的 jQuery 插件,可以按原样使用。
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 );
};
更短的,未经测试的版本:
(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 );
这也很有效。
$.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);
});
};