164

这有什么问题?

HTML:

<form action="http://localhost:8888/bevbros/index.php/test" method="post" accept-charset="utf-8" id="cpa-form" class="forms">        
      <input type="text" name="zip" value="Zip code" id="Zip" class="required valid">      
      <input type="submit" name="Next" value="Submit" class="forms" id="1">
  </form>

jQuery:

$("#cpa-form").submit(function(e){
    e.preventDefault();
  });
4

12 回答 12

197

试试这个:

$("#cpa-form").submit(function(e){
    return false;
});
于 2011-06-24T01:10:00.167 回答
67

使用新的“on”事件语法。

$(document).ready(function() {
  $('form').on('submit', function(e){
    // validation code here
    if(!valid) {
      e.preventDefault();
    }
  });
});

引用:https ://api.jquery.com/on/

于 2014-02-18T13:14:21.357 回答
20

这是一个古老的问题,但这里公认的答案并没有真正找到问题的根源。

你可以通过两种方式解决。首先使用 jQuery:

$(document).ready( function() { // Wait until document is fully parsed
  $("#cpa-form").on('submit', function(e){

     e.preventDefault();

  });
})

或者没有 jQuery:

// Gets a reference to the form element
var form = document.getElementById('cpa-form');

// Adds a listener for the "submit" event.
form.addEventListener('submit', function(e) {

  e.preventDefault();

});

你不需要使用return false来解决这个问题。

于 2018-06-11T17:52:50.630 回答
13

我相信上面的答案都是正确的,但这并没有指出为什么该submit方法不起作用。

好吧,submit如果 jQuery 无法获取form元素,该方法将不起作用,并且 jQuery 不会给出任何错误。如果您的脚本放在文档的头部,请确保代码在DOMready之后运行。所以,$(document).ready(function () { // your code here // });会解决问题。

最佳做法是,始终将您的脚本放在文档的底部。

于 2015-04-25T15:16:09.693 回答
7
$('#cpa-form input[name="Next"]').on('click', function(e){
    e.preventDefault();
});
于 2014-07-02T10:05:51.357 回答
3
$(document).ready(function(){
    $("#form_id").submit(function(){
        return condition;
    });
});
于 2013-11-14T07:10:36.543 回答
3

已弃用- 此部分已过时,因此请不要使用它。

如果您稍后添加了动态表单,您也可以尝试此代码。例如,您使用 ajax 加载了一个异步窗口并希望提交此表单。

$('#cpa-form').live('submit' ,function(e){
    e.preventDefault();      
    // do something
});

更新- 如果您想处理动态添加的内容,您应该使用 jQuery on() 方法尝试收听文档 DOM。

案例 1,静态版本: 如果您只有几个监听器并且您要处理的表单是硬编码的,那么您可以直接在“文档级别”监听。我不会在文档级别使用侦听器,但我会尝试更深入地了解厄运树,因为它可能会导致性能问题(取决于您网站的大小和内容)

$('form#formToHandle').on('submit'... 

或者

$('form#formToHandle').submit(function(e) {
    e.preventDefault();      
    // do something
});

案例 2,动态版本:如果您已经在代码中收听了文档,那么这种方式对您有好处。这也适用于稍后通过 DOM 添加的代码或使用 AJAX 动态添加的代码。

$(document).on('submit','form#formToHandle',function(){
   // do something like e.preventDefault(); 
});

或者

$(document).ready(function() {
    console.log( "Ready, Document loaded!" );

    // all your other code listening to the document to load 

    $("#formToHandle").on("submit", function(){
        // do something           
    })
});

或者

$(function() { // <- this is shorthand version
   console.log( "Ready, Document loaded!" );

    // all your other code listening to the document to load 

    $("#formToHandle").on("submit", function(){
        // do something           
    })
});
于 2014-08-18T07:44:33.317 回答
3

你的代码很好,只是你需要把它放在 ready 函数中。

$(document).ready( function() {
  $("#cpa-form").submit(function(e){
     e.preventDefault();
  });
}
于 2017-03-27T00:45:47.853 回答
1

你好寻求一种解决方案,使 Ajax 表单与谷歌标签管理器 (GTM) 一起工作,返回 false 阻止完成并在谷歌分析上实时提交事件的激活解决方案是通过 e.preventDefault () 更改返回 false ; 正确工作的代码如下:

 $("#Contact-Form").submit(function(e) {
    e.preventDefault();
   ...
});
于 2016-04-25T22:09:58.933 回答
0

e.preventDefault() 仅在您的 javascript 没有问题时才能正常工作,如果 e.preventDefault() 不起作用,请检查您的 javascript

于 2019-10-06T23:55:39.233 回答
0

好吧,我遇到了类似的问题。对我来说,问题是 JS 文件在 DOM 渲染发生之前被加载。所以将你的移动到标签<script>的末尾。<body>

或使用延迟。

<script defer src="">

所以放心e.preventDefault()应该工作。

于 2020-02-26T13:33:52.013 回答
0

只需定义您的按钮类型,这将阻止表单刷新网页

<button type="button" id="saveBtn">Save</button>
 $('#saveBtn').click(function() {

 });
于 2021-12-31T08:19:54.800 回答