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()はそのように機能するからです。$.postAJAXを使用してフォームを送信する場合は、以下を使用せずに手動で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");                             
    }    
});        
于 2013-03-15T13:00:16.067 に答える