如何使用jquery停止事件传播

时间:2013-03-15 12:58:05

标签: javascript jquery

我正在使用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");
    }
});        

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

根据submit doc

  

[...]我们可以通过调用.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
});         

答案 2 :(得分:0)

那是因为.submit()以这种方式工作。如果您想使用AJAX提交表单,那么您希望使用$.post手动发出AJAX请求,而不是.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");                             
    }    
});