我有这个输入表单,只要用户触发on-submit
或 on-blur
事件,我就会保存输入的值。
我遇到了问题,每当用户触发on-submit
时,自然也会触发on-blur
事件。因此触发具有相同内容的两个事件。 (不是一个大问题,但仍然)。
我搜索了解决方案并为jQuery
找到了很多,我相信我需要一个原始的javascript
解决方案。
这是我的表单:
<form method="post" on-submit="doneEditAction">
<input
type="text"
value="{{editValue::input}}"
id="editItemInputField"
on-keyup="editKeyupAction"
on-blur="editBlur">
<button type="submit">edit</button>
</form>
此表单在我提交表单时触发doneEditAction
事件。但与此同时,editBlur
事件也会被触发,这应该与doneEditAction
事件相同,以保存输入的值。
editBlur 活动
editBlur: function (e) {
this.doneEditAction(e);
this.editing = false;
}
doneEditAction 活动
doneEditAction: function (e) {
e.preventDefault();
console.log(this.editingValue);
this.editing = false;
}
这是我的问题:
on-blur
事件?或者修改
当您尝试编辑时,只看到Polymer TodoMVC并且他们还会触发两个事件。证明:
这是否意味着,如果两个相同的事件被触发,那实际上并不重要?
答案 0 :(得分:0)
由于每次触发on-blur
事件时都会自动触发on-submit
事件,因此doneEdit
事件处理程序会执行两次。
由于doneEdit
事件处理程序将editing
属性设置为false
两次,因此有一个简单的解决方案可以确保doneEdit
事件只执行一次。
在doneEdit
我们检查editing
是否为true
,然后才执行我们想要的任何操作,将editing
值设置为false
。
doneEdit(function) {
if(this.editing === true) {
this.editing = false;
console.log(this.editingValue);
}
}
因此,当doneEdit
事件由于on-blur
事件而第二次被调用时,this.editing
已设置为false
且console.log()
不是执行了两次。
感谢PolymerTodoMVC源代码。