通过点击Enter阻止用户提交表单
我在一个网站上进行了一项调查,似乎有一些问题与用户点击输入(我不知道为什么),并意外提交调查(表单),而无需点击提交按钮。 有没有办法来防止这种情况?
我在调查中使用HTML,PHP 5.2.9和jQuery。
您可以使用诸如。的方法
$(document).ready(function() {
$(window).keydown(function(event){
if(event.keyCode == 13) {
event.preventDefault();
return false;
}
});
});
在阅读关于原始帖子的评论时,为了使其更加可用,并允许人们在完成所有字段后按Enter键:
function validationFunction() {
$('input').each(function() {
...
}
if(good) {
return true;
}
return false;
}
$(document).ready(function() {
$(window).keydown(function(event){
if( (event.keyCode == 13) && (validationFunction() == false) ) {
event.preventDefault();
return false;
}
});
});
不要在任何地方输入密钥
如果您的表单中没有<textarea>
,则只需将以下内容添加到<form>
:
<form ... onkeypress="return event.keyCode != 13;">
或者用jQuery:
$(document).on("keypress", "form", function(event) {
return event.keyCode != 13;
});
这将导致表单中的每个按键都将在keyCode上进行检查。 如果它不是13(Enter键),那么它将返回true,任何事情都会按预期进行。 如果它是13(回车键),那么它将返回false,任何东西都会立即停止,所以表单将不会被提交。
keypress
事件比keydown
更keydown
因为只有在实际插入字符时才会触发此事件。 当任何按键被按下时(包括控制键), keydown
(和keyup
)都会被触发。 而且, keyCode
的keypress
代表插入实际的字符,不使用物理按键。 这样您不需要明确检查Numpad Enter键(108)是否也被按下。 该keyup
是来不及阻止表单提交。
请注意,在其他答案(而不是$(document)
$(window)
中建议的$(window)
在IE <= 8中不适用于keydown
/ keypress
/ keyup
,因此,如果您想要覆盖那些不好的用户以及。
只允许在textareas上输入密钥
如果你的表单中有一个<textarea>
(当然应该接受Enter键),那么将keypress处理程序添加到不是<textarea>
每个单独的输入元素。
<input ... onkeypress="return event.keyCode != 13;">
<select ... onkeypress="return event.keyCode != 13;">
...
为了减少样板,最好用jQuery来完成:
$(document).on("keypress", ":input:not(textarea)", function(event) {
return event.keyCode != 13;
});
如果在这些输入元素上附加了其他事件处理函数,并且您还希望在出于某种原因输入密钥时调用该函数,则只能防止事件的默认行为而不是返回false,以便它可以正确传播给其他处理程序。
$(document).on("keypress", ":input:not(textarea)", function(event) {
if (event.keyCode == 13) {
event.preventDefault();
}
});
只允许在textareas上输入密钥并仅提交按钮
如果你想允许按下提交按钮<input|button type="submit">
,那么你总是可以细化选择器如下。
$(document).on("keypress", ":input:not(textarea):not([type=submit])", function(event) {
// ...
});
请注意,在某些其他答案中建议的input[type=text]
不包括那些HTML5非文本输入,因此这不是一个好的选择器。
为了防止表单被提交,我必须捕获与按键相关的所有三个事件:
var preventSubmit = function(event) {
if(event.keyCode == 13) {
log("caught ya!");
event.preventDefault();
//event.stopPropagation();
return false;
}
}
$("#search").keypress(preventSubmit);
$("#search").keydown(preventSubmit);
$("#search").keyup(preventSubmit);
您可以将以上所有内容组合成一个精美的简洁版本:
$('#search').bind('keypress keydown keyup', function(e){
if(e.keyCode == 13) { e.preventDefault(); }
});
链接地址: http://www.djcxy.com/p/49135.html
上一篇: Prevent users from submitting a form by hitting Enter
下一篇: Submitting a form by pressing enter without a submit button