我有以下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表单提交。任何一种解决方案都是可以接受的,但上面包含的代码不会阻止表单提交。
当前回答
完整的解决方案在JavaScript的所有浏览器
上面的代码和大多数解决方案都是完美的。 然而,我认为最喜欢的是一个不完整的“简短回答”。
这就是全部答案。在JavaScript和本地支持IE 7以及。
var form = document.getElementById("testForm");
form.addEventListener("submit",function(e){e.preventDefault(); return false;});
这个解决方案现在将阻止用户使用enter Key提交,并且不会重新加载页面,或者如果您的表单位于页面下方的某个位置,则不会将您带到页面顶部。
其他回答
以上大多数答案将阻止用户在textarea字段中添加新行。如果这是你想要避免的情况,你可以通过检查当前有焦点的元素来排除这种特殊情况:
var keyCode = e.keyCode || e.which;
if (keyCode === 13 && !$(document.activeElement).is('textarea')) {
e.preventDefault();
return false;
}
$(document).on('keyup keypress', 'form input[type="text"]', function(e) {
if(e.which == 13) {
e.preventDefault();
return false;
}
});
这个解决方案适用于网站上的所有表单(也适用于插入ajax的表单),只防止输入文本中的输入。把它放在文档就绪函数中,然后永远忘记这个问题。
下面的代码将禁止在提交表单时使用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>
3年过去了,没有一个人能完全回答这个问题。
请求者希望取消默认的表单提交并调用自己的Ajax。这是一个简单的要求和简单的解决方案。不需要拦截每个输入中的每个字符。
假设表单有一个提交按钮,无论是<button id="save-form">还是<input id="save-form" type="submit">,执行:
$("#save-form").on("click", function () {
$.ajax({
...
});
return false;
});
捕获和测试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年代以来,这一直是标准的浏览器行为。