Ajax提交表单两次

时间:2013-10-13 11:46:02

标签: jquery ajax forms submit

本论坛的所有案例都没有帮助我。我做了所有引用的选项,如

$(this).unbind("click");
e.stopPropagation();
e.preventDefault();
return false;
$('form').unbind("submit");
onsubmit="return false;
etc...

我试过那些到处都是。他们没有为我的案子工作过。 Plz,帮助我,我只是需要尽快启动项目。

这是我的代码:

<form class="form-horizontal" method="post" id="payment">
  <fieldset id="pincode_fieldset" <?php echo ($user->pincode=="" ||      $user->pincode_error==3)? "disabled":""; ?>>
    <input type="text" class="form-control" id="username" name="username">
    <input type="text" class="form-control" id="password" name="password">
    <input type="text" class="form-control" id="deposit" name="deposit">
    <a type="submit" id="submit_btn" class="btn btn-primary btn-small pull-right">Pay</a>
  </fieldset>
</form>


<script>

//payment confirmation;
function confirmPayment(){

$("#username2").text($("#username").val());
$("#deposit2").text("€"+$("#deposit").val());
$('#confirmModal').modal('show');

$("#confirm_btn").click(function(e){
    $("#modal_content").hide();
    //$(this).unbind("click");
    submitForm('#payment','payment.php', true, true);
    //e.stopPropagation();  
});

$("#back_btn").click(function(){
    $('#confirmModal').modal('hide');
    $(document).ready(function(){
        $('#modal_content').show('slow');
    });
});
   //$('form').unbind("submit");
   return false;
}

$("#payment").submit(function(){
    confirmPayment(); 
    return false;
});

</script>

案例1: 当我单击#submit_btn并单击#confirm_btn表单提交一次时;

案例2: 当我单击#submit_btn并单击#back_btn并单击#submit_btn并单击#confirm_btn表单提交两次时;

案例3: 如果我做了3次动作,它会提交三次

我检查了alert(); 问题出在这里:

$("#confirm_btn").click(function(e){
    $("#modal_content").hide();
    //$(this).unbind("click");
    submitForm('#payment','payment.php', true, true);
    //e.stopPropagation();  
});

submitForm()一次又一次地提交取决于我对#submit_btn所做的点击。我需要在提交之前为用户提供确认选项。请帮帮我,我无法解决它整天昼夜。

2 个答案:

答案 0 :(得分:0)

我会做这样的事情,(i)取消对作为提交按钮的<a..>元素的点击,以及(ii)将顶级的小部件动作与模态/ ok-绑定按钮实际上提交表单。

<form class="form-horizontal" method="post" id="payment" action="payment.php">
    ...
    <a type="submit" id="submit_btn" class="btn btn-primary btn-small pull-right">Pay</a>
    ...
</form>

<script>
$(document).ready(function () {

    $("#confirm_btn").click(function (e) {
        $('#payment').submit();
        $("#confirmModal").hide();
    });

    $("#back_btn").click(function () {
        $('#confirmModal').modal('hide');
    });

    function displayModal() {
        $("#username2").text($("#username").val());
        $("#deposit2").text("€" + $("#deposit").val());
        $('#confirmModal').modal('show');
    }

    // clicking on the submit button shouldn't submit, but just 
    // display the modal. 
    $("#submit_btn").click(function () {
        displayModal();
        return false; 
    });

});
</script>

答案 1 :(得分:0)

最后我自己解决了这个问题。 我只是将confirmPayment()拆分为两个,它起作用了:

<script>

//payment confirmation;
 function confirmPayment()
{
     $("#username2").text($("#username").val());
     $("#deposit2").text("€"+$("#deposit").val());
     $('#confirmModal').modal('show');
 }

 $(document).ready(function(){
     $("#confirm_btn").click(function(e){
         $("#modal_content").hide();
         submitForm('#payment','payment.php', true, true);
     });

     $("#back_btn").click(function(){
        $('#confirmModal').modal('hide');
        $(document).ready(function(){
            $('#modal_content').show('slow');
        });
    });

   return false;
 });

 $("#payment").submit(function(){
     confirmPayment(); 
     return false;
 });

 </script>