【问题标题】:What is the default behavior of the 'return' key in an HTML form? [duplicate]HTML 表单中“return”键的默认行为是什么? [复制]
【发布时间】:2021-12-15 17:02:06
【问题描述】:

我一直认为点击“Return”键的默认行为是提交表单。但它似乎更复杂:如果附近有一个按钮,则“返回”键似乎会模拟该按钮上的“点击”事件,而不是提交表单。这是一个例子:

document.querySelector('form').onsubmit = ev => {
  ev.preventDefault();
  document.querySelector('#result').innerText
    = ev.target.elements.text.value;
};

document.querySelector('#troublesome').onclick = 
  ev => {
    ev.preventDefault();
    ev.target.innerText = Math.random();
  };
<form>
  <input type="text" name='text' value='something' />
  <button id="troublesome">Trouble</button>
  <button>Submit</button>
</form>

<div id="result">not submitted</div>

在上面,当您在&lt;input&gt; 元素中按回车键时,浏览器会选择单击“麻烦”按钮。但为什么?这里到底发生了什么?我在哪里可以阅读规范?

【问题讨论】:

  • 您是否尝试过交换两个按钮以查看当您聚焦输入并按 Enter 时的效果?
  • @dalelandry 是的 - 然后它会选择另一个按钮。就好像它选择了最接近输入的按钮,但我不知道在哪里可以找到规范中描述的这种行为
  • 因为 return 单击了该表单中的第一个提交按钮。你所有的按钮都是提交按钮。
  • 我刚刚找到了stackoverflow.com/questions/925334/…,它更详细地提出并回答了这个问题,所以我投票结束了我自己的问题
  • @connexo 谢谢 - 从 HTML5 开始就是这种情况:stackoverflow.com/a/925353/229792

标签: javascript html


【解决方案1】:

两个按钮元素都没有类型集。 Type=submit "如果没有为与&lt;form&gt; 关联的按钮指定属性,则为默认值" (MDN Webdocs) 而麻烦的是输入字段之后的下一个。如果您将其类型更改为“按钮”,则“提交”将提交。

同样来自MDN:“请注意,提交事件会在元素本身上触发,而不是在任何元素或元素内部触发。但是,发送以指示表单的提交操作已被触发的 SubmitEvent 包括提交者属性,即触发提交请求的按钮。如果提交不是由某种按钮触发的,则 submitter 的值为 null。(如果没有元素 type=submit 并且在输入中按下 Enter , 表单将提交 event.submitter = null)

逻辑似乎是“找到最接近焦点的具有 type="submit" 的按钮,并在该按钮上模拟点击事件,否则退回到仅提交表单”(在某处没有明确找到这个) 在您的示例中,“麻烦”属于“提交”类型并且最接近输入,如果没有“prevent.default()”,则会触发两个事件(点击和提交)。

document.querySelector('form').onsubmit = ev => {
  ev.preventDefault();
  document.querySelector('#result').innerText
    = ev.target.elements.text.value;
};

document.querySelector('#troublesome').onclick = 
  ev => {
    ev.preventDefault();
    ev.target.innerText = Math.random();
  };
<form>
  <input type="text" name='text' value='something' />
  <button type="button" id="troublesome">Trouble</button>
  <button>Submit</button>
</form>

<div id="result">not submitted</div>

【讨论】:

  • 谢谢 - 你是说行为是“找到最接近焦点的按钮 type="submit",并在该按钮上模拟 click 事件,否则回退到只提交表单“?规范中是否描述了这种行为?
  • @jameshfisher 是的,这似乎是逻辑,但不幸的是,我也没有在任何地方明确写出这个。
  • 谢谢@Corrl - 我刚刚找到stackoverflow.com/a/925353/229792,它表示HTML5 行为是“表单元素的默认按钮是第一个提交按钮”
猜你喜欢
  • 1970-01-01
  • 2014-03-31
  • 2011-02-26
  • 1970-01-01
  • 2019-05-11
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多