【问题标题】:Form is still submitted even though listener function returns false即使侦听器函数返回 false,仍会提交表单
【发布时间】:2010-11-01 08:02:51
【问题描述】:

我试图弄清楚为什么这个 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 上遇到相同的结果。谢谢。

【问题讨论】:

标签: javascript forms addeventlistener onsubmit


【解决方案1】:

看起来如果您将功能更改为

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

它应该可以满足您的需求。

source

【讨论】:

    【解决方案2】:

    我认为您正在寻找的是实现它的浏览器的Event 接口的preventDefault() 方法。它将以您期望“return false”的方式取消表单提交。

    更多herehere

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

    【讨论】:

      【解决方案3】:

      将两个非常有用的答案中的信息组合成一个适用于 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-02
        相关资源
        最近更新 更多