Javascript函数执行太多次



这就是我填充表格的方式 我在使用jquery的数据表插件时遇到了一些问题。该表是动态填充的,我有 3 列文本和第四列,由删除和编辑按钮组成。对于编辑按钮,我有一个模态,如果我确认更改,它确实会更改表中的特定行。 但是,如果我单击多个编辑按钮并取消,当我实际上想要更改一个按钮时,它会更改所有以前取消的行。 以下是相关代码:

$("#example").on("click", ".edit-button", function() {
$("#edit-modal").modal("show");
saveChanges(this);
});
function saveChanges(k) { 
$("#edit-confirm").click(function() {
$(".itm-loader-modal").show();
setTimeout(function() {editJob(k);},1000); 
});
}
function editJob(currentButton) {
$(".itm-loader-modal").fadeOut("slow");
var editedName = $("#job-name").val();
var editedDescription = $("#job-description").val();
var editedCompany = $("#job-company").val();
var data = {
"name":editedName,
"description": editedDescription,
"company": editedCompany
};
var currentLine = $(currentButton).parent().parent().children(); 
currentLine.eq(0).text(data.name);
currentLine.eq(1).text(data.description);
currentLine.eq(2).text(data.company);
$("#edit-modal").modal("hide");
}

很难确定,但有一种观点看起来不对,那就是每次调用saveChanges时,您都会#edit-confirm按钮上注册新的事件侦听器。

单击该#edit-confirm后,它将执行所有已注册的事件处理程序 - 每次单击.edit-button一个。

相反,您可能希望有一个#edit-confirm单击处理程序,并找到一种方法来传递有关当前正在编辑的行的信息。

干杯。

所以当你调用saveChanges时,它会将事件处理程序分配给"#edit-confirm",所有这些事件处理程序都会立即执行,

为避免这种情况,您应该通过委派将事件处理程序附加到它,或者我认为这个快速修复应该有效

$(this).find('#edit-confirm').click(function() {
/...
})

最新更新