【发布时间】:2016-03-26 09:24:02
【问题描述】:
我一直在寻找一种方法来永久更改 HTMLFormElement Javascript 对象的“提交”行为。假设我的一个 Javascript 将包含以下代码:
HTMLFormElement.prototype.onsubmit = function () {
this.submit();
// Make sure that you can only submit once.
this.onsubmit = function () {
return false;
};
return false;
};
我们的想法是简单地防止在所有形式的文档上重复提交。由于上面的示例不起作用,我无法弄清楚如何执行此操作。
有没有办法在加载文档后不循环遍历所有现有的 HTMLElement 来实现这一点?如果您使用其他脚本创建新的表单元素,这种方式将与某些较旧的浏览器兼容并且还保持该行为。 (请仅使用香草 JS)
【问题讨论】:
-
只编写不提交表单两次而不是更改原生原型的代码不是更容易吗?
-
我试过了,甚至多个
.submit()或多次点击提交按钮只提交了一次表单。 -
document.addEventListener("submit", function(e){ var el=e.target; if(el.spent) return e.preventDefault(); el.spent=true; }) -
@dandavis 不要在事件监听器中使用
return false,这仅适用于事件处理程序。使用e.preventDefault()。 -
“与某些旧浏览器兼容”有多旧?如果您想与旧版浏览器兼容,为什么要使用 [ES6] 标签?您是试图阻止用户完成表单提交(通过提交按钮或隐式提交),还是由您完成(通过
.submit())?您在表单中使用target吗?
标签: javascript html dom ecmascript-6 ecmascript-5