形式仍然提交即使监听器函数返回false
-
12-09-2019 - |
题
我试图找出为什么这个JavaScript不能阻止提交表单:
<form action="http://www.example.com" id="form">
<input type="text" />
<input type="submit" />
</form>
<script>
var code = function () {
return false;
};
var element = window.document.getElementById("form");
if (element.addEventListener) {
element.addEventListener("submit", code, false);
}
</script>
除非我下面onsubmit属性添加到窗体元素:
<form action="http://www.example.com" id="form" onsubmit="return false">
<input type="text" />
<input type="submit" />
</form>
<script>
var code = function () {
return false;
};
var element = window.document.getElementById("form");
if (element.addEventListener) {
element.addEventListener("submit", code, false);
}
</script>
好像addEventListener方法单独应达到目的。有什么想法吗?我在Mac上,我遇到了在Safari,Firefox和Opera相同的结果。感谢。
解决方案
从合并两个非常有用的答案成Mac和PC上工作的解决方案的信息:
<script>
var code = function (eventObject) {
if (eventObject.preventDefault) {
eventObject.preventDefault();
} else if (window.event) /* for ie */ {
window.event.returnValue = false;
}
return true;
};
var element = window.document.getElementById("form");
if (element.addEventListener) {
element.addEventListener("submit", code, false);
} else if (element.attachEvent) {
element.attachEvent("onsubmit", code);
}
</script>
其他提示
我想你要找的是什么preventDefault()
界面的实现它的浏览器Event
方法。这将取消表单提交你预计“return false
”的方式。
<script type="text/javascript">
var code = function (evt) {
if (evt.preventDefault) {
evt.preventDefault();
}
return false;
};
window.onload = function() {
var element = window.document.getElementById("form");
if (element.addEventListener) {
element.addEventListener("submit", code, false);
}
};
</script>
不隶属于 StackOverflow