【问题标题】:form onSubmit triggers the wrong button表单 onSubmit 触发错误按钮
【发布时间】:2018-04-19 23:25:29
【问题描述】:

我有一个带有输入和两个按钮的表单,一个是“按钮”取消,一个是“输入”提交。但是,当我在输入时按下返回键时,onSubmit 事件会根据它们在 HTML DOM 上的位置触发按钮。这是简化的代码

// cancel button goes first
<form id="form">
  <input>
  <button id="cancel">Cancel</button>
  <input type="submit" value="Submit">
</form>

const cancelButton = document.getElementById('cancel');
const form = document.getElementById('form');

cancelButton.addEventListener('click', () => { console.log('cancel') });
form.addEventListener('submit', () => { console.log('submit') });

当我按回车键输入时,它会记录“取消”。但是,如果我先放置提交按钮,我将正常记录“提交”。

返回键怎么可能触发取消按钮上的监听器?

【问题讨论】:

  • 变量 cancelButtonform 是什么 - 你还没有显示它们代表什么
  • @JaromandaX 对不起,我太懒了,让我穿上。
  • 我知道这可能很明显,只是想排除愚蠢的错别字:p
  • @JaromandaX 是的,这只是一种伪代码,代码更复杂。不过让我看看有没有错别字。
  • @h1b9b 答案很好,但顺便说一句......你为什么不坚持使用相同类型的对象? &lt;button type="button"&gt;Cancel&lt;/button&gt;&lt;button type="submit"&gt;Submit&lt;/button&gt; -- or make them both ` 元素。无论哪种方式,您都将事件处理程序连接到它们两者。如果它们都是相同的种类,那么设计看起来会更加一致。

标签: javascript html forms addeventlistener


【解决方案1】:

默认情况下,button 标记类型为 submit
所以你应该指定类型以避免这个问题

cf:https://www.w3schools.com/tags/tag_button.asp中的提示和注释部分

const cancelButton = document.getElementById('cancel');
const form =  document.getElementById('form');
cancelButton.addEventListener('click', () => { console.log('cancel') });
form.addEventListener('submit', () => { console.log('submit') });
<form id="form">
  <input>
  <button type="button" id="cancel">Cancel</button>
  <input type="submit" value="Submit">
</form>

【讨论】:

  • 你打败了我 :)
  • 非常感谢!但是我刚刚发现 onSubmit 不起作用大声笑,当我按返回时它不会记录任何内容
  • 不工作?在此示例中,通过按返回执行 console.log 并发布表单,因此如果您不在控制台中保留日志,您将看不到任何内容。你也可以preventDefault停止事件传播
  • @h1b9b 是的,我放了 preventDefault,但是按回车键甚至不会进入函数(我在它们上放了断点)
  • @h1b9b 我发现如果我将侦听器添加到提交按钮,按下返回将触发该侦听器,但永远不会触发表单上的侦听器。这很奇怪,因为昨天还好好的。
猜你喜欢
  • 1970-01-01
  • 2020-04-19
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
相关资源
最近更新 更多