按回车键时,onClick 不会仅使用一个输入触发

onClick doesn't fire with only one input when pressing enter

提问人:Daniel Silveira 提问时间:8/13/2008 最后编辑:Rich ChurcherDaniel Silveira 更新时间:1/15/2018 访问量:1689

问:

我在 Internet Explorer 7 中的事件时遇到问题。

当我有一个包含两个或更多窗体的窗体并按回车键时,事件按以下顺序发生:input[type=text]

  1. 提交按钮 (onClick)
  2. 形式 (onSubmit)

示例代码:

<form onSubmit="{alert('form::onSubmit'); return false;}">
    <input type="text">
    <input type="text">
    <input type="submit" onClick="{alert('button::onClick');}">
</form>

如果我只有一个,并且我按回车键,则不会触发提交按钮事件。示例代码:input[type=text]onClick

<form onSubmit="{alert('form::onSubmit'); return false;}">
    <input type="text">
    <input type="submit" onClick="{alert('button::onClick');}">
</form>
JavaScript 事件 Internet-Explorer-7

评论

1赞 lawnsea 7/7/2010
这个问题解决了这个问题:在具有单个输入字段的表单上,ENTER键将自动使用GET提交

答:

1赞 andrewrk 8/13/2008 #1

如果希望代码在用户按回车键时运行,只需使用 onSubmit 处理程序即可。

如果希望代码在用户按下按钮时运行,而不是在用户按 Enter 时运行,请使用 type=“submit” 以外的按钮。

5赞 TheSmurf 8/13/2008 #2

按钮的 onclick 应该(我认为)只有在按钮实际被点击时才会触发(或者当焦点在它上面并且用户单击回车时),除非您添加了逻辑来更改它。

添加额外的文本框是否可能会更改元素的 Tab 键顺序(在这种情况下,可能会使按钮成为默认控件)?

1赞 bubbassauro 8/23/2008 #3

有趣的是,如果您在只有一个文本框的第二个示例上单击屏幕(从文本框中删除焦点),则事件 onClick 将触发......因此,这不是预期的行为,因为仅当您只有一个文本框并且将焦点放在文本框上时,才会发生这种情况。
恐怕您在浏览器上发现了一个错误,您必须找到解决方法,或者在这种情况下避免使用 onClick 事件。
我使用 onSubmit 事件进行验证,因为它是一个“更安全”的事件,更有可能在不同的浏览器和情况下工作。

1赞 Brian Warshaw 8/23/2008 #4

出于好奇,您是否使用 DOCTYPE,如果是,是哪一个?我并不是说与 DOCTYPE 的不兼容是问题所在,但在尝试其他任何事情之前,要排除怪癖模式。

3赞 mplungjan 7/7/2010 #5

从浏览器诞生之初,表单中的单个输入字段将在有或没有提交按钮的输入时提交。这是为了让人们更容易从单个搜索字段中搜索网站。

如果您需要在表单中执行一些 javascript,则更安全的做法是使用表单的 onsubmit(并返回 false 以停止提交),而不是在提交按钮的 onClick 中执行脚本。如果您需要从按钮执行 javascript,请使用 type=“button” 而不是 type=“submit” - 希望这能澄清我的意思

评论

0赞 Tim Pietzcker 10/4/2010
我没有投反对票,但我在解析最后一句话时遇到了麻烦。(“永远不要在点击提交按钮时做任何事情,但总是在......一个按钮点击“???)
0赞 Crystal Paladin 3/3/2016 #6

您可能希望包含一个虚拟的隐藏输入元素,以重新创建您有两个输入元素的情况......这样一来,你就会触发这两个事件

<FORM onSubmit="{alert('form::onSubmit'); return false;}">
    <INPUT TYPE="text">
    <input type="hidden" name="dummy">
    <INPUT TYPE="submit" onClick="{alert('buttom::onClick');}">
</FORM>

IE 有很多令人困惑的修复,需要完成这些修复来提高我们代码的兼容性