我有以下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提交,并且不会重新加载页面,或者如果您的表单位于页面下方的某个位置,则不会将您带到页面顶部。

其他回答

更短:

$('myform').submit(function() {
  return false;
});

下面是一个简单的JavaScript解决方案,没有使用不同的处理键下或按键事件的变化:

document.forms[0].addEventListener('submit', function(e) {
    if(document.activeElement.getAttribute('type') !== 'submit') {
        e.preventDefault();
    }
});

只有当页面上的活动元素是提交按钮时,才会提交表单。 因此,您可以通过单击提交按钮或在提交按钮有焦点时按ENTER键提交表单。

下面的代码将禁止在提交表单时使用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> 
$('#FormID').on('keyup keypress', function (e) {
        var keyCode = e.keyCode || e.which;
        if (keyCode === 13) {
            e.preventDefault();
            return false;
        }
    });

3年过去了,没有一个人能完全回答这个问题。

请求者希望取消默认的表单提交并调用自己的Ajax。这是一个简单的要求和简单的解决方案。不需要拦截每个输入中的每个字符。

假设表单有一个提交按钮,无论是<button id="save-form">还是<input id="save-form" type="submit">,执行:

$("#save-form").on("click", function () {
    $.ajax({
        ...
    });
    return false;
});