通过按Enter阻止用户提交表单

在网站上,用户可能意外通过按Enter键提交表单,而非点击提交按钮。这个问题可以通过JavaScript和jQuery来解决。例如,可以给表单添加'onsubmit'事件,返回false以阻止默认的提交行为,或者在特定输入元素上监听键盘事件,阻止Enter键的提交动作。此外,可以允许在文本区域上使用Enter键,但仅当焦点在提交按钮上时才真正提交表单。
摘要由CSDN通过智能技术生成

我在网站上进行了一项调查,用户单击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(&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值