2015-02-09 215 views
0

如果我按下快速触发点击呼叫的按钮,我正努力使自己的表单能够防止双重submision。我试图在成功后禁用按钮,但它仍然发送两次。这里是我的代码:Ajax数据表格序列化防止双重提交

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

    $("button#rezerva").click(function() { 
     var chkArray = []; 
     $(".table:checked").each(function() { 
      chkArray.push($(this).attr("id")); 
     }); 
     var selected; 
     selected = chkArray.join(","); 
     $.ajax({ 
      type: "POST", 
      url: "http://rezerv.city/engine/app/add_rezervare.php?mese=" + selected, 
      data: $("form#formular_rezervare").serialize(), 
      success: function (data) { 
       switch (data) { 
        case "nume_error": 
         $(".msg").html("<p>Vă rugăm completați numele</p>").fadeIn("slow"); 
         break; 
        case "tel_error": 
         $(".msg").html("<p>Vă rugăm completați telefonul</p>").fadeIn("slow"); 
         break; 
        case "email_error": 
         $(".msg").html("<p>Vă rugăm completați un email valid</p>").fadeIn("slow"); 
         break; 
        case "tel_numar": 
         $(".msg").html("<p>Numarul de telefon trebuie sa contina 10 cifre</p>").fadeIn("slow"); 
         break; 
        case "adaugat": 
         $('#rezerva").attr('disabled', 'disabled') 
         var ora = document.getElementById("timepicker1").value; 
         var zi_aleasa = document.getElementById("zi").value; 
         var tip = document.getElementById("tipp").value; 
         var id_local = document.getElementById("id_local").value; 
         $("#filtru_zi").load("http://rezerv.city/select_tip_rezervare.php?zi=" + zi_aleasa + "&tip=" + tip + "&id=" + id_local); 
         $(".succes").html("<p class=\'text-center\'>Ati rezervat masa <b>" + selected + "</b> in data de <b>" + zi_aleasa + "</b> la ora <b>" + ora + "</b></p><p class=\'text-center\'><button class=\'btn btn-default\' type=\'button\' id=\'inchide\'>Închide</button></p>").fadeIn("slow"); 
         break; 
        default: 
         alert("A aparut o eroare. Va rugam incercati mai tarziu."); 
       } 
      }, 
     }); 
    }); 
}); 
</script> 
+0

你试图在点击事件开始后立即禁用按钮?并且如果调用不成功,则启用该按钮。 – OmerBTW 2015-02-09 22:21:53

+0

这是正确的答案,我敢打赌,有一个更优雅的方式来解决这个问题,但现在thnx :) – user3463807 2015-02-09 23:15:11

回答

-1

你必须立即禁用,当点击subbmit不在成功

selected = chkArray.join(","); 
$('#rezerva"]').attr('disabled','disabled')//ADD THIS 
$.ajax({ 
      type: "POST", 
      url: "http://rezerv.city/engine/app/add_rezervare.php?mese="+selected, 
      data: $("form#formular_rezervare").serialize(), 
      success: function(data){ 
      switch(data) { 
        case "nume_error": 
         $(".msg").html("<p>Vă rugăm completați numele</p>").fadeIn("slow"); 
$('#rezerva"]').attr('enable','enable')//ADD THIS 
         break; 
+0

这是正确的答案,我敢打赌有一个更优雅的方法来解决这个问题,但是现在thnx可以工作: )。 ('''''''''')''('#rezerva')。removeAttr('disabled','disabled')' – user3463807 2015-02-09 23:16:31

0

我建议将处理程序从onclick更改为onsubmit并使用e.preventDefault。

$("#formid").on('submit', function(e){ 
    e.preventDefault(); 
    //the rest of your code 
}); 
+0

我改变了提交和由于某种原因它没有提交任何东西,只是刷新我的页面 – user3463807 2015-02-09 23:00:16

+0

设法提交只有在我添加了$(“form#formid”)而不是$(“#formid”)后才工作,但是e.prevenDefault只是防止刷新页面而不是我的多个子视频 – user3463807 2015-02-09 23:28:55

+0

#formid应该被设置为包含按钮 – 2015-02-10 08:05:06

0

我会将事件侦听器绑定到表单的提交事件而不是按钮的单击。我知道你没有在你的问题上提出要求,但是绑定到表单的提交事件会给用户带来更好的体验,因为你的用户仍然可以在表单中按下输入来提交它。

现在,至于你的问题,看起来问题在于你使用Ajax。即使您的ajax请求尚未返回,该表单仍会提交。你需要做的是:

$(function() { 
    $('#myform').submit(function (e) { 
      e.preventDefault(); 

      // continue on with your business logic 
    }); 
}); 

当然的Click事件的工作方式相同,因此,如果您需要绑定到提交按钮的点击事件,你可以做以下还有:

$(function() { 
    $("button#rezerva").click(function (e) { 
     e.preventDefault(); 

     // continue on with business logic 
    }); 
}); 
+0

我用e.preventDefault,但我仍然可以双击并发送我的表单两次。基本上,在成功响应没有错误后,我希望我的按钮不会再次发送表单,即使按下按钮 – user3463807 2015-02-09 23:04:07