javascript - 如何将 'toggle' 事件绑定(bind)到元素

标签 javascript jquery jquery-ui toggle

有没有一种方法可以将“绑定(bind)”语法用于“切换”事件处理程序?

从文档我可以理解正确的方法是

$('.selector').toggle( function() {}, function() {} );

我的问题是我出于某种原因要删除该元素,然后再次将其添加到 DOM。再次添加时,切换不起作用。

因此,我认为应该有一种方法来“绑定(bind)”切换。

请帮忙。

这是我正在关注的文档: http://jqapi.com/#p=toggle

最佳答案

您必须使用 .live() .delegate() 将处理程序添加到所有现在的和 future 的元素。

问题是 .toggle() 绑定(bind)点击,在复杂的情况下,比如使用 .live() .delegate() 你必须自己制作。来自 jQuery 文档:

The .toggle() method is provided for convenience. It is relatively straightforward to implement the same behavior by hand, and this can be necessary if the assumptions built into .toggle() prove limiting.

滚动你自己的切换(这可以使用 mod N 而不是 mod 2 轻松扩展到 N 切换功能 - 但你必须使用 switch 而不是 JS 条件运算符):

var counter = 1;
$('.selector').live("click", function() {
    counter++ % 2 ? 
        // First set of actions :
        // Second set of actions;            
});

如果你想包含 2 个函数,那么它们必须是自执行的。这对于在...中传递参数很有用,因此形式为:

var counter = 1;
$('.selector').live("click", function() {
    counter++ % 2 ? 
        (function() { ... }()) :                            // <== First function
        (function() { ... }());                            // <== Second function
});


一个简单的例子(没有使用参数):

(function() {
    var counter = 1;
    $('.selector').live("click", function() {
        counter++ % 2 ? 
            $("div").html("First one!") :
            $("div").html("Numero dos!");

        });
    $(function() {
        $("body").prepend('<input type="button" ' + 
                          'class="selector" value=" Click Me! " />');
    });
}());

try it out on jsFiddle


一个更复杂的例子(使用了参数):

(function() {
    var counter = 1;
    $('.selector').live("click", function() {
        // Note that the self executing functions are only
        // necessary if you want to use arguments.
        counter++ % 2 ? 
            (function() {
                $("div").html("First one! Num: " + ($(event.target).index() + 1))
            }(event)) :
            (function() {
                $("div").html("Numero dos! Num: " + ($(event.target).index()+1))
            }(event));            
        });
    $(function() {
        $elie = $('<input type="button" class="selector" value="Click Me!" />');
        $elie.clone().prependTo("body");
        $elie.clone().prependTo("body");
        $elie.clone().prependTo("body");        
    });
}());

try it out on jsFiddle

关于javascript - 如何将 'toggle' 事件绑定(bind)到元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3854678/

相关文章:

jquery - 使用带有自定义箭头的 jQuery UI 工具提示会导致工具提示问题

javascript - 如何在 Angular 7 中输入路由数据(在生产中)?

javascript - 较大的 Bootstrap 模态内部的小型 Bootstrap 模态

javascript - 将回调附加到多个 jquery Promise

jquery - 如何从 PNG 文件创建网站模型,我只想添加链接

javascript - x-editable(jQuery UI 构建)抛出 Uncaught TypeError

javascript - 无论类型是否正确,PropTypes 都会出错

javascript - .lrc 的任何 JavaScript 解析器?

javascript - 在实际更改选择框之前获取 onChange 值

javascript - iOS 上的 JQ UI 可拖动 : initiating dragging in taphold-handler