使用 addEventListener onSubmit 表单

新手上路,请多包涵

我对 HTML 和 JavaScript 很陌生。下面是示例代码。下面的代码块与 onsubmit 作为表单标签属性一起工作

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Custom Tags</title>
</head>

<body>

  <form id="form1" action="#" onsubmit="functSubmit()">
    <label for="input1">This text will be passed in CustomeEvent</label>
    <input id="input1" type="text" value="default">
    <input type="submit" id="bt1">
  </form>

  <script>
    function functSubmit(event) {

      var msg = document.getElementById("input1").value;
      alert(msg);
    }
  </script>

</body>
</html>

但是当我用 addEventListener() 编写下面的代码时,它不起作用。

 <!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Custom Tags</title>
</head>

<body>

  <form id="form1" action="#">
    <label for="input1">This text will be passed in CustomeEvent</label>
    <input id="input1" type="text" value="default">
    <input type="submit" id="bt1">
  </form>

  <script>
    document.getElementById("form1").addEventListener('submit', functSubmit(event));

    function functSubmit(event) {
      var msg = document.getElementById("input1").value;
      alert(msg);
    }
  </script>

</body>
</html>

谁能解释为什么 addEventListener 不起作用?

原文由 user2206366 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 410
1 个回答

那是因为您正在立即调用事件侦听器的回调。只需将函数作为参数传递,而不调用它。任何时候提交表单,该函数都会将事件对象传递给它。

 document.getElementById("form1").addEventListener('submit', functSubmit);

function functSubmit(event) {
  var msg = document.getElementById("input1").value;
  alert(msg);
}
 <!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Custom Tags</title>
</head>

<body>

  <form id="form1" action="#">
    <label for="input1">This text will be passed in CustomeEvent</label>
    <input id="input1" type="text" value="default">
    <input type="submit" id="bt1">
  </form>

</body>

</html>

附带说明:通常更好的做法是将 HTML 的关注点与 JavaScript 分开。虽然在属性中内联事件处理程序有效,但它耦合了两个独立的问题。为了便于维护,请单独管理您的处理程序。您还可以获得利用事件委托的好处。

原文由 Seth 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题