簡體   English   中英

即使偵聽器函數返回 false,表單仍會提交

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

我想弄清楚為什么這個 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>

看起來如果您將功能更改為

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

它應該做你正在尋找的。

來源

我認為您正在尋找的是實現它的瀏覽器的Event接口的preventDefault()方法。 它將以您期望的“ 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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM