jQuery > 1.8中应该使用什么替代`toggle(...)`?

11

现在,toggle(...) 在 jQuery 1.8 中被弃用,然后在 jQuery 1.9 中被删除

除了使用jQuery migrate脚本之外,在一般情况下可以使用什么代替toggle(fn, fn2);具有相同的功能?

相关问题(针对特定情况提出):除了toggle,还能用什么?


我知道toggle()的功能并没有被删除,只是无法添加自定义的toggle函数(除了默认的显示/隐藏功能)。


如果你经常使用它,那就自己实现吧,这里有一些例子:https://forum.jquery.com/topic/beginner-function-toggle-deprecated-what-to-use-instead#14737000003769261。我发现将其隐藏在一个函数后面比到处都是计数器变量要容易理解得多。 - Kevin B
有很多可供选择的替代开关,只需使用最适合您所追求的动画的那个。 - Lowkase
有趣的是,相关的弃用注释(http://bugs.jquery.com/ticket/11786)并没有暗示一个合适的替代品。dmethvin(http://bugs.jquery.com/ticket/11786#comment:7)的评论只涉及到Migrate。 - Jeromy French
1
这是一种方法,它有很好的用途,但命名不方便。该方法被广泛使用并确实节省了代码,但 .toggle() 的显示隐藏使用更多,因此前者已被删除以简化 API。 - Kevin B
1
@Lokase:toggle event(http://api.jquery.com/toggle-event/)已被弃用;toggle effect(http://api.jquery.com/toggle/)**未**被弃用。不明确的部分是事件正在消失的原因之一(http://bugs.jquery.com/ticket/11786#comment:1)。 - Jeromy French
显示剩余2条评论
1个回答

20

这里是一个简单的实现:

$.fn.toggleClick = function() {
    var methods = arguments;    // Store the passed arguments for future reference
    var count = methods.length; // Cache the number of methods 

    // Use return this to maintain jQuery chainability
    // For each element you bind to
    return this.each(function(i, item){
        // Create a local counter for that element
        var index = 0;

        // Bind a click handler to that element
        $(item).on('click', function() {
            // That when called will apply the 'index'th method to that element
            // the index % count means that we constrain our iterator between 0
            // and (count-1)
            return methods[index++ % count].apply(this, arguments);
        });
    });
};

并将其用作

$('selector').toggleClick( function1, function2, ... );

我喜欢它。你能添加一些注释来解释给其他人吗?^_^ - Naftali
@Neal,我进行了更新,因为我忘记了return this以保持链接。 - Gabriele Petrioli
为什么在点击处理程序中需要使用 return - Naftali
@Neal,这样我们就尊重用户对其传递方法的使用。例如,如果应用于链接,用户可能会在末尾执行return false,我们希望将其传递给我们自己的单击处理程序以供使用。 - Gabriele Petrioli
这个函数的工作方式是否类似于旧版的JQuery toggle?我想我的问题实际上是,我能否在这个函数中使用效果,就像旧版的 toggle('slow', function(){...}) 一样? - Ares Draguna
@AresDraguna,不行。普通的切换可以做到这一点(如果包括jquery UI)。这是一个旧版本的jquery实现,它执行完全不同的操作。它用于循环执行函数列表。(*与在屏幕上切换元素无关,请参见http://api.jquery.com/toggle-event/*) - Gabriele Petrioli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接