输入触发器按钮单击

2022-08-30 01:21:22

我有一个带有两个按钮的页面。一个是元素,另一个是 .按钮按该顺序显示在页面上。如果我在窗体中任何位置的文本字段中并按 ,则按钮元素的事件被触发。我假设这是因为按钮元素位于第一位。<button><input type="submit"><Enter>click

我找不到任何看起来像设置默认按钮的可靠方法,也不一定想在这一点上这样做。在没有更好的东西的情况下,我已经在表单上的任何地方捕获了一个按键,如果它是被按下的键,我只是否定它:<Enter>

$('form').keypress( function( e ) {
  var code = e.keyCode || e.which;

  if( code === 13 ) {
    e.preventDefault();
    return false; 
  }
})

据我所知,到目前为止,它似乎正在起作用,但它感觉非常笨拙。

有谁知道一种更复杂的技术来做到这一点?

同样,这个解决方案是否有任何我不知道的陷阱?

谢谢。


答案 1

<button type="button">Whatever</button>

应该做这个把戏。

原因是窗体中的按钮的类型隐式设置为 。正如zzzzBoz所说,Spec说第一个或与是在这种情况下触发的。如果您专门设置了 ,则会将其从浏览器的考虑范围中删除。submitbuttoninputtype="submit"type="button"


答案 2

阅读HTML规范以真正了解预期的行为非常重要:

HTML5 规范明确说明了隐式提交中发生的情况

表单元素的默认按钮是树形顺序中的第一个提交按钮,其表单所有者是该表单元素。

如果用户代理支持让用户隐式提交表单(例如,在某些平台上,当文本字段聚焦时按“enter”键隐式提交表单),则对于默认按钮具有定义的激活行为的表单,这样做必须导致用户代理在该默认按钮上运行综合单击激活步骤。

这在HTML4规范中没有明确规定,但是浏览器已经实现了HTML5规范中描述的内容(这就是为什么它被明确包含的原因)。

编辑以添加:

我能想到的最简单的答案是将提交按钮作为表单中的第一项,使用css在表单底部添加填充,并将提交按钮绝对放置在您喜欢的底部。[type="submit"]