jQuery .toggle() 按钮仅切换所有其他元素

标签 jquery toggle

我的代码只需单击一个按钮即可生成不同的元素。生成的元素之一是按钮,我想打开和关闭生成的文本部分。 jQuery .toggle() 函数适用于生成的第一个元素。然后,它仅适用于生成的最新元素以及在此之前的所有其他元素(例如,生成了 5 个元素,它将适用于 5、3、1,但不适用于 2 和 4)。我认为这似乎是该类的问题,因为我可以从 Firefox 的 Web 控制台使用 .toggle() 命令手动删除它。我想这意味着按钮没有触发。我很茫然。

这是一个显示行为的 jsFiddle http://jsfiddle.net/JaLBR/1/ 这是代码:

recursionCounter = 0
$(document).ready(function(){

$("#compute").click(function(){

    //add the toggle data
    $("#buttons").append("<input type=button value=\"Toggle\" class=\"removeBtn\" id=\"recursion" + recursionCounter + "\">")
    //add the recursion counter to the div element
    $("#recursion" + recursionCounter).data("recurs", recursionCounter)

    //make a new section for toggling purposed
    $("#results").append("<o" + (recursionCounter) + ">")
    //This code write the results to screen
    $("o" + (recursionCounter)).append("<br><br> <b>Recursion " + (recursionCounter) + "</b>")
    $("o" + (recursionCounter)).append("<br> Symmetric")

//toggles the recursion info
$(".removeBtn").on("click", function() {
    var count = $(this).data("recurs")
    $("o" + count).toggle()   
})


recursionCounter = recursionCounter + 1
})

})

在 html 上使用适当的 ',如 fiddle 中所示。

我认为这可能是由于将单击的调用嵌套在另一个单击中?我尝试将其移出“计算”单击,但它根本不会切换(可能是因为范围?)但是,问题仅在切换时显示出来。如果将 .toggle() 改为 .hide(),则所有按钮都可以工作。如果我单独显示/隐藏按钮,那么它就可以正常工作。如果我编写执行切换行为的 if..else 语句(使用 .is(:visible)),它也不起作用。

最佳答案

jQuery 不会取代事件处理程序。如果您附加两个事件处理程序:

$('#foo').click(function() {
    console.log('a');
});

$('#foo').click(function() {
    console.log('a');
});

然后点击#foo,它们都会触发。

每次添加新元素时,每个 .removeBtn 元素都会获取另一个 事件处理程序,用于切换其各自元素的可见性。当您最终单击该按钮时,所有事件处理程序都会相继触发,并且该元素会切换偶数或奇数次,具体取决于您添加的按钮数量。

要修复此问题,请从 .click() 回调中删除该事件处理程序,然后将其附加到事件委托(delegate)中:

$('#buttons').on("click", ".removeBtn", function () {
    var count = $(this).data("recurs");
    $("o" + count).toggle()
});

事件委托(delegate)将事件处理程序附加到#buttons,然后将事件委托(delegate)给被单击的元素。这将考虑与您的选择器匹配的所有元素,即使它们是稍后添加的。

演示:http://jsfiddle.net/JaLBR/4/

关于jQuery .toggle() 按钮仅切换所有其他元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16371230/

相关文章:

javascript - 需要帮助在 jQuery 模式对话框中输入 html

javascript - 用户配置文件栏的更好方法

jQuery - 切换和删除类

iOS Toggles 不会在 View Controller 之间保留它们的状态

javascript - Bootstrap 切换选项卡无法正常工作

javascript - 如何使用 jQuery 为指令模板中的元素设置值

javascript - 为什么我的用于删除焦点文本并在模糊时重新添加文本的 jQuery 插件不起作用?

javascript - 如何将值附加到存储在元素中的自定义数据

javascript - 在两种不同的不透明度之间切换

css - 如何在不使用float的情况下让div填充剩余空间?