【发布时间】:2018-07-17 06:40:05
【问题描述】:
我的网络应用程序中有一个表单按钮,(纯粹用 Vanilla Js 制作),该表单用于从用户那里获取数据,当单击按钮时,该数据会转到 HTML 表格等等。
要编辑表格行,我在表格列(每一行)上放置了编辑按钮,下面附上的图片将有助于清楚地了解:
蓝色的提交按钮被命名为“addButton”,当用户点击表格中特定行的“编辑”时,相应的数据显示在输入字段中,因此用户可以填写新的详细信息。
到这里一切都很好,现在真正的问题开始了:在用户编辑输入字段中的信息后,蓝色提交按钮用于保存这些更改并自发地在表格中显示更改。 (这是必需的行为)。
实际上发生的是:修改后的行显示在表中,并且在行中创建了具有相同详细信息的新条目(“addButton”事件侦听器执行两次,一次用于保存用户所做的更改,一次用于在行中添加新项目)。
我已经放置了这个事件监听器(同名,因为我不想要单独的按钮来保存编辑的信息)两次。 为清楚起见,请查看代码:
(这是全局范围内的第一个 addButton 事件监听器 - 用于向表中添加新条目)
addButton.addEventListener("click", function(e){
var obj = {
id : object.count,
date : formatDate(inDate.value, inMonth.value),
day : inDay.value,
item : inItem.value,
price : parseInt(inPrice.value),
};
object.info.push(obj);
object.count += 1;
refreshDOM();
});
对于行中的“编辑和删除”按钮,我有这个:
modifyBtn 绑定到表格,所以我可以通过它获得点击目标。
(在 modifyBtn 内部存在第二个 addButton 事件侦听器 - 用于保存更改并在表格中显示输出)
modifyBtn.addEventListener('click', function(e){
if(e.target.classList[0] === 'editInfo'){
var eid = e.target.getAttribute('data-id');
var eindex = getIndex(eid);
inDay.value = object.info[eindex]['day'];
inDate.value = parseInt(object.info[eindex]['date'].substr(0,2));
inMonth.value = object.info[eindex]["date"].substr(4);
inItem.value = object.info[eindex]['item'];
inPrice.value = object.info[eindex]['price'];
addButton.addEventListener("click", function(e){
object.info[eindex]['day'] = inDay.value;
object.info[eindex]['date'] = formatDate(inDate.value, inMonth.value);
object.info[eindex]['item'] = inItem.value;
object.info[eindex]['price'] = parseInt(inPrice.value);
refreshDOM();
});
}
if(e.target.classList[0] === 'deleteInfo'){
var did = e.target.getAttribute('data-id');
var dindex = getIndex(did);
console.log(dindex);
object.info.splice(dindex,1);
refreshDOM();
}
});
所以在用户点击蓝色提交按钮进行编辑后,我只希望在 modifyBtn 事件监听器中执行 addButton 事件监听器,
目前两个addButton 事件监听器都被执行。 很抱歉,您的解释太深了。
【问题讨论】:
-
嘿克鲁佩什!我有一个有效的修复,但它很长,所以请耐心等待我写它:-)
-
当然,为什么不呢。急切地等待解决方案。顺便说一句,您是否尝试过使用该应用程序,将一些数据输入到表中然后对其进行编辑。你注意到我上面提到的错误了吗?
标签: javascript dom-events