我有一个有两个按钮的页面。一个是<button>元素,另一个是<input type="submit">元素。按钮按此顺序出现在页面上。如果我在表单中的任何一个文本字段中,并按下<Enter>,则会触发按钮元素的单击事件。我认为这是因为button元素放在前面。
我找不到任何看起来可靠的方法来设置默认按钮,我也不想在这一点上。在没有更好的东西的情况下,我已经捕获了窗体上的任何地方的一个按键,如果它是<Enter>键被按下,我只是否定它:
$('form').keypress( function( e ) {
var code = e.keyCode || e.which;
if( code === 13 ) {
e.preventDefault();
return false;
}
})
据我所知,到目前为止,它似乎是有效的,但感觉难以置信的笨拙。
有人知道更复杂的方法吗?
同样,这个解决方案是否存在我没有意识到的陷阱?
谢谢。
通过在聚焦<input type="text">上按“Enter”,你在第一个定位的元素上触发“click”事件:<button>或<input type="submit">。如果你在<textarea>中按“Enter”,你只是创建了一个新的文本行。
请看这里的例子。
你的代码阻止在<textarea>中创建一个新的文本行,所以你必须捕捉键按下<input type="text">。
但是为什么需要在文本框中按Enter呢?如果你想通过按“Enter”来提交表单,但<按钮>必须保持在布局中的第一个位置,只需使用标记:将<input type="submit">代码放在<按钮>之前,并使用CSS保存你需要的布局。
捕获'Enter'并保存标记:
$('input[type="text"]').keypress(function (e) {
var code = e.keyCode || e.which;
if (code === 13) {
e.preventDefault();
// also submit by pressing Enter:
$("form").submit();
}
});