9

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

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

  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>
4

6 回答 6

5

按钮的 onclick 应该(我认为)仅在实际单击按钮时触发(或者当焦点位于按钮上并且用户单击 Enter 时),除非您添加了逻辑来更改它。

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

于 2008-08-13T00:08:17.007 回答
3

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

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

于 2010-07-07T15:19:14.290 回答
1

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

于 2008-08-22T16:09:58.697 回答
1

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

于 2008-08-22T16:13:05.773 回答
1

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

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

于 2008-08-12T23:43:34.903 回答
0

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

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

IE 有很多令人困惑的修复,需要做以提高我们代码的兼容性

于 2016-03-03T14:52:38.533 回答