提问人:Daniel Silveira 提问时间:8/13/2008 最后编辑:Rich ChurcherDaniel Silveira 更新时间:1/15/2018 访问量:1689
按回车键时,onClick 不会仅使用一个输入触发
onClick doesn't fire with only one input when pressing enter
问:
我在 Internet Explorer 7 中的事件时遇到问题。
当我有一个包含两个或更多窗体的窗体并按回车键时,事件按以下顺序发生:input[type=text]
- 提交按钮 (
onClick
) - 形式 (
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>
答:
如果希望代码在用户按回车键时运行,只需使用 onSubmit 处理程序即可。
如果希望代码在用户按下按钮时运行,而不是在用户按 Enter 时运行,请使用 type=“submit” 以外的按钮。
按钮的 onclick 应该(我认为)只有在按钮实际被点击时才会触发(或者当焦点在它上面并且用户单击回车时),除非您添加了逻辑来更改它。
添加额外的文本框是否可能会更改元素的 Tab 键顺序(在这种情况下,可能会使按钮成为默认控件)?
有趣的是,如果您在只有一个文本框的第二个示例上单击屏幕(从文本框中删除焦点),则事件 onClick 将触发......因此,这不是预期的行为,因为仅当您只有一个文本框并且将焦点放在文本框上时,才会发生这种情况。
恐怕您在浏览器上发现了一个错误,您必须找到解决方法,或者在这种情况下避免使用 onClick 事件。
我使用 onSubmit 事件进行验证,因为它是一个“更安全”的事件,更有可能在不同的浏览器和情况下工作。
出于好奇,您是否使用 DOCTYPE,如果是,是哪一个?我并不是说与 DOCTYPE 的不兼容是问题所在,但在尝试其他任何事情之前,要排除怪癖模式。
从浏览器诞生之初,表单中的单个输入字段将在有或没有提交按钮的输入时提交。这是为了让人们更容易从单个搜索字段中搜索网站。
如果您需要在表单中执行一些 javascript,则更安全的做法是使用表单的 onsubmit(并返回 false 以停止提交),而不是在提交按钮的 onClick 中执行脚本。如果您需要从按钮执行 javascript,请使用 type=“button” 而不是 type=“submit” - 希望这能澄清我的意思
评论
您可能希望包含一个虚拟的隐藏输入元素,以重新创建您有两个输入元素的情况......这样一来,你就会触发这两个事件
<FORM onSubmit="{alert('form::onSubmit'); return false;}">
<INPUT TYPE="text">
<input type="hidden" name="dummy">
<INPUT TYPE="submit" onClick="{alert('buttom::onClick');}">
</FORM>
IE 有很多令人困惑的修复,需要完成这些修复来提高我们代码的兼容性
评论