简体   繁体   English

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

[英]Form is still submitted even though listener function returns false

I'm trying to figure out why this JavaScript doesn't stop the form from being submitted:我想弄清楚为什么这个 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>

Unless I add the following onsubmit attribute to the form element:除非我将以下 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>

Seems like the addEventListener method alone should do the trick.似乎单独的 addEventListener 方法应该可以解决问题。 Any thoughts?有什么想法吗? I'm on a Mac and I'm experiencing the same result on Safari, Firefox and Opera.我使用的是 Mac,我在 Safari、Firefox 和 Opera 上遇到了相同的结果。 Thanks.谢谢。

Combined the information from the two very helpful answers into a solution that works on both Mac and PC:将两个非常有用的答案中的信息组合成一个适用于 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>

Looks like if you change your function to看起来如果您将功能更改为

var code = function(e) {
    e.preventDefault();
}

It should do what you're looking for.它应该做你正在寻找的。

source 来源

I think what you're looking for is the preventDefault() method of the Event interface for browsers that implement it.我认为您正在寻找的是实现它的浏览器的Event接口的preventDefault()方法。 It will cancel the form submission in the way you expected " return false " to.它将以您期望的“ return false ”的方式取消表单提交。

More here and here .更多这里这里

<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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM