我在网站上进行了一项调查,用户单击Enter键(我不知道为什么),然后不按提交按钮就意外提交了调查(表单),似乎存在一些问题。 有办法防止这种情况吗?
我在调查中使用的是HTML,PHP 5.2.9和jQuery。
#1楼
给表单一个动作'javascript:void(0);' 似乎可以解决问题
<form action="javascript:void(0);">
<input type="text" />
</form>
<script>
$(document).ready(function() {
$(window).keydown(function(event){
if(event.keyCode == 13) {
alert('Hello');
}
});
});
</script>
#2楼
我有一个类似的问题,我有一个带有“ ajax文本字段”(Yii CGridView)的网格,并且只有一个提交按钮。 每次我在文本字段中进行搜索,然后点击输入提交的表单。 我必须对按钮做一些事情,因为它是视图之间的唯一通用按钮(MVC模式)。 我要做的就是删除type="submit"
并放入onclick="document.forms[0].submit()
#3楼
在我的特定情况下,我必须停止ENTER提交表单,还必须模拟单击Submit按钮。 这是因为提交按钮上具有单击处理程序,因为我们在模式窗口中(继承的旧代码)。 无论如何,这是我针对这种情况的组合解决方案。
$('input,select').keypress(function(event) {
// detect ENTER key
if (event.keyCode == 13) {
// simulate submit button click
$("#btn-submit").click();
// stop form from submitting via ENTER key press
event.preventDefault ? event.preventDefault() : event.returnValue = false;
}
});
该用例对使用IE8的人员特别有用。
#4楼
采用:
// Validate your form using the jQuery onsubmit function... It'll really work...
$(document).ready(function(){
$(#form).submit(e){
e.preventDefault();
if(validation())
document.form1.submit();
});
});
function validation()
{
// Your form checking goes here.
}
<form id='form1' method='POST' action=''>
// Your form data
</form>
#5楼
这对我有用
jQuery.each($("#your_form_id").find('input'), function(){
$(this).bind('keypress keydown keyup', function(e){
if(e.keyCode == 13) { e.preventDefault(); }
});
});
#6楼
如果使用脚本执行实际的提交,则可以向onsubmit处理程序添加“ return false”行,如下所示:
<form onsubmit="return false;">
从JavaScript调用表单上的commit()不会触发该事件。
#7楼
我认为所有答案都已涵盖其中,但是如果您使用带有一些JavaScript验证代码的按钮,则只需将表单的onkeypress设置为Enter即可按预期方式调用您的提交:
<form method="POST" action="..." onkeypress="if(event.keyCode == 13) mySubmitFunction(this); return false;">
onkeypress JS可能是您需要执行的任何操作。 无需进行更大的全球变革。 如果您不是一个从头开始编写应用程序的人,而您已经被投入修复其他人的网站而无需拆开并重新测试它,则尤其如此。
#8楼
我想添加一些CoffeeScript代码(未经现场测试):
$ ->
$(window).bind 'keypress', (event) ->
if event.keyCode == 13
unless {'TEXTAREA', 'SELECT'}[event.originalEvent.srcElement.tagName]
event.preventDefault()
(我希望您喜欢“ except”子句中的技巧。)
#9楼
我只需要阻止特定的输入提交,因此我使用了一个类选择器,以便在需要的地方都将其作为“全局”功能。
<input id="txtEmail" name="txtEmail" class="idNoEnter" .... />
和这个jQuery代码:
$('.idNoEnter').keydown(function (e) {
if (e.keyCode == 13) {
e.preventDefault();
}
});
或者,如果击键不足:
$('.idNoEnter').on('keypress keydown keyup', function (e) {
if (e.keyCode == 13) {
e.preventDefault();
}
});
一些注意事项:
这里修改各种很好的答案, 回车键似乎工作keydown
上所有的浏览器。 作为替代,我将bind()
更新为on()
方法。
我是类选择器的忠实拥护者,权衡了所有优缺点和性能讨论。 我的命名约定是'idSomething',以指示jQuery将其用作ID,以将其与CSS样式分开。
#10楼
在对其他解决方案感到沮丧之后,这对所有浏览器都有效。 我也建议您使用name_space外部函数来避免声明全局变量。
$(function() {window.name_space = new name_space();}); //jquery doc ready
function name_space() {
this.is_ie = (navigator.userAgent.indexOf(&