javascript - 为动态创建的 DOM 对象多次触发事件

标签 javascript jquery

该程序有两个 javascript 函数,用于生成表格 (generateTable) 和删除一个选定的行 (deleteOneRow)。

generateTable 函数根据服务器数据生成一个表。每行采用以下格式:

<tr><td><span class="desc">aaa</span><a href="#delete_choice" class="delete-choice">Delete</a></td> </tr>

基本上,每一行都是一些文本,后面跟着一个“删除”链接。 当脚本完成表格生成时,它调用 $(".delete-choice").click(deleteOneRow) 将点击绑定(bind)到事件处理程序。

在事件处理函数deleteOneRow 中,它首先简单地删除表中的所有行。然后再次调用 generateTable 以显示剩余的数据条目。代码结构如下:

function deleteOneRow() {
    var choiceIdx = ... //get index
    $(".delete-choice").unbind('click');
    CurrentChoices.splice(choiceIdx, 1); // remove the entry from the array
    $("#problem-choice-table  tr").each(function(){ // delete the DOM entries
        $(this).remove();
    })
    generateTable();    
}

如果表格有两行,点击第一行的删除链接后,第一行被删除。然后它生成一个表,其中第 2 行移动到第 1 行。然而,deleteOneRow 再次被调用,然后第二行最终被删除。

我猜这是因为事件被触发了多次。我尝试了解除绑定(bind)、stopPropagation 等。没有任何效果。

最佳答案

使用 jquery 的 live附加事件非常适合动态添加/删除内容并且您想匹配同一个选择器的情况,您是否考虑过使用它?

关于javascript - 为动态创建的 DOM 对象多次触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8060156/

相关文章:

javascript - 如何将文件类型从 Coldfusion 代码传输到 javascript 代码?

javascript - getElementsByClassName 时旋转滚动 javascript 不起作用

javascript - 在 Highchart 中启用/禁用 `Navigator` Pane

javascript - TinyMCE 把 <img/> 变成 <img>

javascript - 使用 Google 网站优化工具测试动态页面

javascript - WebDriver JavascriptExecutor 不工作

javascript - 跨 "page loads"无缝音乐播放的理想解决方案?使用javascript加载页面

javascript - 在没有元素的情况下调用 jQuery 函数

javascript - onLoad 函数未执行

javascript - 使用 MooTools/jQuery 的 Ajax 问题 - p.onStatusChange 不是函数