防止表单上的默认值提交jQuery

djr*_*eed 127 jquery preventdefault

这有什么问题?

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>
Run Code Online (Sandbox Code Playgroud)

jQuery的:

$("#cpa-form").submit(function(e){
    e.preventDefault();
  });
Run Code Online (Sandbox Code Playgroud)

Jor*_*own 165

试试这个:

$("#cpa-form").submit(function(e){
    return false;
});
Run Code Online (Sandbox Code Playgroud)

  • 请参阅此问题以获得更好的解释:http://stackoverflow.com/questions/1357118/event-preventdefault-vs-return-false (25认同)
  • 它有效,但为什么不首选的preventDefault方法有效呢? (11认同)
  • 这是错误的答案.`e.preventDefault()`在表单提交时工作正常,问题出在OP的代码中.使用`return false`*可能会导致意想不到的后果. (6认同)

sca*_*er2 54

使用新的"on"事件语法.

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

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

  • 你好.这对我不起作用.(是的,我将我的代码放在`$(document).ready()`中.如何让它工作? (2认同)

tow*_*wry 12

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

好吧,submit如果jQuery无法获取该form元素,该方法将无法工作,并且jQuery不会给出任何错误.如果你的脚本放在文档的头部,确保代码运行后DOM准备好.那么,$(document).ready(function () { // your code here // });会解决问题.

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


小智 6

$('#cpa-form input[name="Next"]').on('click', function(e){
    e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)


Chu*_*utt 6

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

您可以解决这两种方法。首先使用jQuery:

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

     e.preventDefault();

  });
}
Run Code Online (Sandbox Code Playgroud)

还是没有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();

});
Run Code Online (Sandbox Code Playgroud)

您无需使用return false即可解决此问题。