1

我正在使用 jquery 提交表单,并且在表单提交后似乎无法阻止页面重新加载。

我当前的代码如下所示:

HTML:

<form class="form-horizontal" method="post" action="#" name="basic_validate" id="basic_validate" />
  <div class="control-group">
    <label class="control-label">Image Path</label>
    <div class="controls">
      <input type="text" name="imagepath" id=imagepath />
    </div>
  </div>
  <div class="form-actions">
    <input type=button value="Send" id="sendemailbtn" class="btn btn-primary" />
  </div>
</form>

jQuery:

$("#sendemailbtn").click(function(e) {
    e.preventDefault();
    $("#basic_validate").submit();

    if ($("#basic_validate").children('.control-group').hasClass('error')) {
        return false;
    } else {
        $.post('send_email.php', $("#basic_validate").serialize(), function(data) {

            // I see output on the server side but never hit this area after the submission,

            console.log(data);
        }, "json");
    }
});        
4

3 回答 3

3
$("#basic_validate").submit();

是你的罪魁祸首。该行提交表单并重新加载页面。

于 2013-03-15T13:00:08.797 回答
1

根据submit文档

[...] 我们可以通过在事件对象上调用 .preventDefault() 或从我们的处理程序返回 false 来取消提交操作。

由于.preventDefault()似乎不适合您,请尝试:

$("#basic_validate").submit(function(){

    if ($("#basic_validate").children('.control-group').hasClass('error')) {
        return false;
    }
    else {
        $.post('send_email.php', $("#basic_validate").serialize(), function(data) {

        // I see output on the server side but never hit this area after the submission,

            console.log(data);
        }, "json");                             
    }            
    return false;  //This prevents reloading
});         
于 2013-03-15T13:00:15.850 回答
0

那是因为.submit()那样工作。如果您想使用 AJAX 提交表单,那么您想手动发出 AJAX 请求,$.post而无需.submit()

$("#sendemailbtn").click(function (e) {
    e.preventDefault();
    if (!$("#basic_validate").children('.control-group').hasClass('error')) {
        $.post('send_email.php', $("#basic_validate").serialize(),
        function(data) {
            console.log(data);
        }, "json");                             
    }    
});        
于 2013-03-15T13:00:16.067 回答