Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 通过按Enter键阻止用户提交表单_Jquery_Html_Forms_Form Submit - Fatal编程技术网

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

Jquery 通过按Enter键阻止用户提交表单,jquery,html,forms,form-submit,Jquery,Html,Forms,Form Submit,我在一个网站上做了一个调查,用户点击回车键(我不知道为什么)并在没有点击提交按钮的情况下意外提交了调查(表格),似乎出现了一些问题。有没有办法防止这种情况 我在调查中使用了HTML、PHP5.2.9和jQuery。您可以使用JavaScript方法检查是否按了Enter键,如果按了,则停止提交 <script type="text/javascript"> function noenter() { return !(window.event && window

我在一个网站上做了一个调查,用户点击回车键(我不知道为什么)并在没有点击提交按钮的情况下意外提交了调查(表格),似乎出现了一些问题。有没有办法防止这种情况


我在调查中使用了HTML、PHP5.2.9和jQuery。

您可以使用JavaScript方法检查是否按了Enter键,如果按了,则停止提交

<script type="text/javascript">
  function noenter() {
  return !(window.event && window.event.keyCode == 13); }
</script>

函数noenter(){
return!(window.event&&window.event.keyCode==13);}

只需在submit方法上调用它。

您可以使用以下方法

$(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;
    }
  });
});

您可以保持表单的原样,并添加一些额外的客户端验证,而不是阻止用户按Enter键(这可能看起来很不自然),当调查未完成时,结果不会发送到服务器,用户会收到一条很好的消息,告诉用户完成表单需要完成什么。如果您使用的是jQuery,请尝试验证插件:

这将需要比按下回车键更多的工作,但肯定会提供更丰富的用户体验。

禁止在任何地方按回车键 如果表单中没有
,只需将以下内容添加到

这将导致在
键上检查表单中的每个按键。如果它不是
Enter
,那么它将返回
true
,并且一切照常进行。如果它是
Enter
,那么它将返回
false
,任何内容都将立即停止,因此表单将不会提交

由于
键控
太晚,无法阻止表单提交,因此首选该事件。历史上也有,但这是不赞成的,因为是。您应该改为使用返回被按下键的名称的。选中
Enter
时,将选中13(正常输入)和108(numpad输入)


请注意,
$(窗口)
在一些其他答案中,而不是
$(文档)
中建议的
$(窗口)
不适用于IE中的
键控
/
键控
,这是一个非常简单的小jQuery解决方案:

$("form").bind("keypress", function (e) {
    if (e.keyCode == 13) {
        return false;
    }
});

为了防止表单提交,我必须捕获与按键相关的所有三个事件:

    var preventSubmit = function(event) {
        if(event.keyCode == 13) {
            console.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(); }
    });

给表单一个“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>

$(文档).ready(函数(){
$(窗口).keydown(函数(事件){
如果(event.keyCode==13){
警惕(“你好”);
}
});
});

我有一个类似的问题,我有一个带有“ajax文本字段”(Yii CGridView)的网格,只有一个提交按钮。每次我在文本字段上搜索并点击“输入提交的表单”。我不得不使用按钮,因为它是视图之间唯一的常用按钮(MVC模式)。我所要做的就是删除
type=“submit”
并放置
onclick=“document.forms[0]。submit()

在我的特定情况下,我必须停止ENTER提交表单,并模拟“提交”按钮的单击。这是因为“提交”按钮上有一个单击处理程序,因为我们在一个模式窗口中(继承的旧代码)。在任何情况下,这里是我的组合解决方案

    $('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的人特别有用。

这对我来说很有用

jQuery.each($("#your_form_id").find('input'), function(){
    $(this).bind('keypress keydown keyup', function(e){
       if(e.keyCode == 13) { e.preventDefault(); }
    });
});

如果使用脚本进行实际提交,则可以向onsubmit处理程序添加“return false”行,如下所示:

<form onsubmit="return false;">


从JavaScript调用表单上的submit()不会触发事件。

我认为所有答案都涵盖了它,但是如果您使用带有JavaScript验证代码的按钮,您只需将表单的onkeypress设置为Enter即可按预期调用submit:

<form method="POST" action="..." onkeypress="if(event.keyCode == 13) mySubmitFunction(this); return false;">


onkeypress JS可以是您需要做的任何事情。没有必要进行更大的全局性更改。如果您不是从头开始编写应用程序的人,并且您被带到其他人的网站进行修复,而无需将其拆开并重新测试,这一点尤其正确。

我想添加一点CoffeeScript代码(未经现场测试):


(我希望你喜欢除非子句中的好技巧。)

我需要防止只提交特定的输入,所以我使用了一个类选择器,让它成为我需要的“全局”功能

<input id="txtEmail" name="txtEmail" class="idNoEnter" .... />
或者,如果键控功能不足:

$('.idNoEnter').on('keypress keydown keyup', function (e) {
   if (e.keyCode == 13) {
     e.preventDefault();
   }
});
一些注意事项:

在这里修改各种好的答案,回车键似乎适用于所有浏览器上的
keydown
。另外,我将
bind()
更新为
on()
方法

我非常喜欢类选择器,权衡所有的优缺点和性能讨论。我的命名约定是“idSomething”,表示jQuery将其用作id,以将其与CSS样式区分开来。

使用:

$(document).on('keyup keypress', 'form input[type="text"]', function(e) {
  if(e.keyCode == 13) {
    e.preventDefault();
    return false;
  }
});

此解决方案适用于网站上的所有表单(也适用于使用Ajax插入的表单),防止只输入文本。将其置于文档就绪功能中,然后终生忘记此问题。

我还不能发表评论,因此我将发布一个新的答案

接受的答案还行,但它并没有在numpad enter上停止提交。至少在当前的Chrome版本中是这样。我必须将keycode条件改为这个,然后它才能工作

if(event.keyCode == 13 || event.keyCode == 169) {...}

我在这里没有看到答案:当您在页面上的元素中进行tab操作时,当您到达submit按钮时按Enter键将触发表单上的onsubmit处理程序,但它会将事件记录为MouseeEvent。下面是我的简短解决方案,以涵盖大多数基础:

这不是与jQuery相关的答案

HTML
要找到一个工作示例:

一种完全不同的方法:

  • 按Enter键将激活表单中的第一个
  • <form onsubmit="return false;">
    
    <form method="POST" action="..." onkeypress="if(event.keyCode == 13) mySubmitFunction(this); return false;">
    
    $ ->
        $(window).bind 'keypress', (event) ->
            if event.keyCode == 13
                unless {'TEXTAREA', 'SELECT'}[event.originalEvent.srcElement.tagName]
                    event.preventDefault()
    
    <input id="txtEmail" name="txtEmail" class="idNoEnter" .... />
    
    $('.idNoEnter').keydown(function (e) {
      if (e.keyCode == 13) {
        e.preventDefault();
      }
    });
    
    $('.idNoEnter').on('keypress keydown keyup', function (e) {
       if (e.keyCode == 13) {
         e.preventDefault();
       }
    });
    
    $(document).on('keyup keypress', 'form input[type="text"]', function(e) {
      if(e.keyCode == 13) {
        e.preventDefault();
        return false;
      }
    });
    
    if(event.keyCode == 13 || event.keyCode == 169) {...}
    
    <form onsubmit="return false;" method=post>
      <input type="text" /><br />
      <input type="button" onclick="this.form.submit()" value="submit via mouse or keyboard" />
      <input type="button" onclick="submitMouseOnly(event)" value="submit via mouse only" />
    </form>
    
    window.submitMouseOnly=function(evt){
        let allow=(evt instanceof MouseEvent) && evt.x>0 && evt.y>0 && evt.screenX > 0 && evt.screenY > 0;
        if(allow)(evt.tagName=='FORM'?evt.target:evt.target.form).submit();
    }
    
    <form action="...">
      <!-- insert this next line immediately after the <form> opening tag -->
      <button type=submit onclick="return false;" style="display:none;"></button>
    
      <!-- everything else follows as normal -->
      <!-- ... -->
      <button type=submit>Submit</button>
    </form>
    
    $('form').submit(function () {
      if ($(document.activeElement).attr('type') == 'submit')
         return true;
      else return false;
    });
    
    <input type="button">
    
    <input type="submit">
    
    <script>
    window.addEventListener('keydown', function(e) {
        if (e.keyIdentifier == 'U+000A' || e.keyIdentifier == 'Enter' || e.keyCode == 13) {
            e.preventDefault();
            return false;
        }
    }, true);
    </script>
    
    <script>
    window.addEventListener('keydown', function(e) {
        if (e.keyIdentifier == 'U+000A' || e.keyIdentifier == 'Enter' || e.keyCode == 13) {
            if (e.target.nodeName == 'INPUT' && e.target.type == 'text') {
                e.preventDefault();
                return false;
            }
        }
    }, true);
    </script>
    
     input:disabled {
            background: gainsboro;
          }
          input[value]:disabled {
            color: whitesmoke;
          }
    
    $('form input').keydown(function (e) {
    if (e.keyCode == 13) {
        e.preventDefault();
        return false;
    }
    });
    
    $(document).on("keydown","form", function(event)
    {
       node = event.target.nodeName.toLowerCase();
       type = $(event.target).prop('type').toLowerCase();
    
       if(node!='textarea' && type!='submit' && (event.keyCode == 13 || event.keyCode == 169))
       {
            event.preventDefault();
            return false;
        }
    });
    
        // disable form submit with enter
    
        $('form input:not([type="submit"])').keydown((e) => {
            if (e.keyCode === 13) {
                e.preventDefault();
                return false;
            }
            return true;
        });