我有以下javascript在我的页面似乎不工作。
$('form').bind("keypress", function(e) {
if (e.keyCode == 13) {
e.preventDefault();
return false;
}
});
我想在进入时禁用提交表单,或者更好的是,调用我的ajax表单提交。任何一种解决方案都是可以接受的,但上面包含的代码不会阻止表单提交。
我有以下javascript在我的页面似乎不工作。
$('form').bind("keypress", function(e) {
if (e.keyCode == 13) {
e.preventDefault();
return false;
}
});
我想在进入时禁用提交表单,或者更好的是,调用我的ajax表单提交。任何一种解决方案都是可以接受的,但上面包含的代码不会阻止表单提交。
当前回答
捕获和测试ENTER键的每一次击键确实让我很恼火,所以我的解决方案依赖于以下浏览器行为:
按下ENTER将触发提交按钮上的单击事件(在IE11, Chrome 38, FF 31中测试)** (参考:http://mattsnider.com/how-forms-submit-when-pressing-enter/)
所以我的解决方案是删除标准提交按钮(即<input type="submit">),这样上述行为就会失败,因为当按下ENTER键时没有提交按钮可以神奇地点击。相反,我在一个常规按钮上使用jQuery点击处理程序,通过jQuery的.submit()方法提交表单。
<form id="myform" method="post">
<input name="fav_color" type="text">
<input name="fav_color_2" type="text">
<button type="button" id="form-button-submit">DO IT!</button>
</form>
<script>
$('#form-button-submit').click(function(){
$('#myform').submit();
});
</script>
演示:http://codepen.io/anon/pen/fxeyv?editors=101
**如果表单只有一个输入字段并且该字段是'text'输入,则此行为不适用;在这种情况下,即使HTML标记中没有提交按钮(例如,搜索字段),表单也会按ENTER键提交。自90年代以来,这一直是标准的浏览器行为。
其他回答
$(document).on('keyup keypress', 'form input[type="text"]', function(e) {
if(e.which == 13) {
e.preventDefault();
return false;
}
});
这个解决方案适用于网站上的所有表单(也适用于插入ajax的表单),只防止输入文本中的输入。把它放在文档就绪函数中,然后永远忘记这个问题。
更短:
$('myform').submit(function() {
return false;
});
如果keyCode未被捕获,则捕获哪个:
$('#formid').on('keyup keypress', function(e) {
var keyCode = e.keyCode || e.which;
if (keyCode === 13) {
e.preventDefault();
return false;
}
});
编辑:错过了它,最好使用键up而不是按键
编辑2:在一些较新版本的Firefox中,表单提交不会被阻止,因此在表单中添加按键事件会更安全。它也不能工作(不再?),只是将事件绑定到表单“name”,但只绑定到表单id。因此,我通过适当地更改代码示例使这一点更加明显。
修改bind()为on()
下面的代码将禁止在提交表单时使用enter键,但仍然允许在文本区域中使用enter键。您可以根据需要进一步编辑它。
<script type="text/javascript">
function stopRKey(evt) {
var evt = (evt) ? evt : ((event) ? event : null);
var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
if ((evt.keyCode == 13) && ((node.type=="text") || (node.type=="radio") || (node.type=="checkbox")) ) {return false;}
}
document.onkeypress = stopRKey;
</script>
我听说哪个是不推荐的,所以把最佳评分的答案改成这个。
$('#formid').on('keyup keypress', function(e) {
if (e.key === 'Enter') {
e.preventDefault();
return false;
}
});
引用https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/which