【发布时间】:2020-10-04 03:58:35
【问题描述】:
大家好!
在这种情况下,我想做一个单页应用程序
这总是需要添加、加载、编辑或删除 HTML 元素
然后我发现了一些烦人的问题,
当我的事件提交的每次点击也计算该点击时,
像我第二次点击那个提交,会导致两次数据提交
再次点击第三次提交,会导致提交三次数据,以此类推。
我的代码说明:
我有一个数据表,在每一行都有一个按钮来编辑当前数据,当用户单击该按钮时,它将向页面添加一个新表单,这就是我的问题,当我提交该表单时编辑事件委托正在计算我的事件也影响了提交的数据量
var el_tbl_body = document.getElementById("tbody");
el_tbl_body.addEventListener("click", function (event) {
var this_el = event.target;
// Handling error
if (typeof this_el.attributes.id !== "undefined") {
// Click only work in id="edit-datatable"
if (this_el.attributes.id.value === "edit-datatable") {
// This method for holding add another form edit datatable
// so it will be only one form
if (document.getElementById("form-edit-datatable") !== null) {
document.getElementById("form-edit-datatable").parentNode.remove();
}
var new_form = document.createElement("div");
new_form.innerHTML =
'<form action="#" method="POST" id="form-edit-datatable">' +
'<input type="text" id="edit-name" value="Example value" required/>' +
'<input type="submit" id="submit-edit-datatable" value="Ubah data"/>' +
'<form/>';
this_el.parentNode.insertBefore(new_form, this_el);
}
if (document.getElementById("form-edit-datatable") !== null) {
// The problem is in here
document.getElementById("form-edit-datatable").addEventListener("submit", function (ev) {
ev.preventDefault();
console.log("data has been send")
});
}
}
});
<table id="table">
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>address</th>
</tr>
</thead>
<tbody id="tbody">
<tr>
<td>3778</td>
<td>John Doe</td>
<td>Paris</td>
<td><button id="edit-datatable">Edit Data</button></td>
</tr>
<tr>
<td>2353</td>
<td>Eric Samuel</td>
<td>Hamburg</td>
<td><button id="edit-datatable">Edit Data</button></td>
</tr>
</tbody>
</table>
【问题讨论】:
-
所以每次“点击”代码都会添加另一个“提交”处理程序?正如它所写的那样,这似乎是预期的,因为这就是“点击”处理程序在代码中所做的......
标签: javascript html dom events native