即使侦听器函数返回false,仍然会提交表单

7 javascript forms addeventlistener onsubmit

我试图弄清楚为什么这个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>
Run Code Online (Sandbox Code Playgroud)

除非我将以下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>
Run Code Online (Sandbox Code Playgroud)

好像单独使用addEventListener方法就可以了.有什么想法吗?我在Mac上,我在Safari,Firefox和Opera上遇到了相同的结果.谢谢.

小智 8

将两个非常有用的答案中的信息组合到一个适用于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>
Run Code Online (Sandbox Code Playgroud)


Jac*_*cob 6

看起来如果你改变你的功能

var code = function(e) {
    e.preventDefault();
}
Run Code Online (Sandbox Code Playgroud)

它应该做你想要的.

资源