对于动态创建的DOM对象,会多次触发事件

时间:2011-11-09 03:56:29

标签: 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)来将click绑定到事件处理程序。

在事件处理函数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();    
}

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

我猜这是因为事件多次被触发。我试过unbind,stopPropagation等等。没有任何作用。

1 个答案:

答案 0 :(得分:2)

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