1

jQuery uiダイアログと確認ボックスを使用して、次のコードでテーブルに新しいレコードを追加しようとしています。確認ボタンをダブルクリックすると、レコードがデータベースに2回追加されます。どうすればこれを防ぐことができますか?

function AddNewClient(){    
            jQuery("#confirmdialog").html("are you sure");
            jQuery("#confirmdialog").dialog({
                  modal: true,  
                  buttons : {
                    "Confirm" : function() {                                                                                            
                        jQuery.ajax({
                              type: "POST",                           
                              url: "index.php?option=com_travelagencycrm&view=clients&task=AddNewClient&format=raw",
                              cache: false,     
                              data : {id:jQuery("#client_id").val(),
                                      fullname:jQuery("#fullname").val(),
                                      vat_id:jQuery("#vat_id").val(),                                     
                                      address:jQuery("#address").val(),
                                      state_id:jQuery("#state_name").val(),
                                      country_id:jQuery("#country_name").val(),
                                      email:jQuery("#email").val(),
                                      phone_1:jQuery("#phone_1").val(),
                                      phone_2:jQuery("#phone_2").val(),
                                      postalcode:jQuery("#postalcode").val()                                    
                                }
                            }).done(function(msg) {         

                                jQuery("#tablepanelclients").flexReload();
                                //alert(msg);
                                jQuery("#confirmdialog").dialog("close");
                                jQuery("#editclient").dialog("close");                              

                            }).error(function(msg){
                                alert(msg);
                                jQuery("#confirmdialog").dialog("close");
                                jQuery("#editclient").dialog("close");
                            });


                    },
                    "Cancel" : function() {
                        jQuery(this).dialog("close");
                    }
                  }
                });

              jQuery("#confirmdialog").dialog("open");

        }
4

3 に答える 3

1

クライアント側の解決策の1つは、ブール値を追加することです。

var sent = false;

..。

  buttons : {
                "Confirm" : function() { 
                    if (sent) return;
                    sent = true;                                                                                           
                    jQuery.ajax({

もう1つのより堅牢なソリューションは、サーバー側でこれらのデータをまだ挿入していないことを確認することです。サーバーの外部(ブラウザまたはネットワーク上)であらゆる種類の問題や攻撃が発生する可能性があるため、私は一般的にこれを好みます。

于 2012-09-03T16:23:00.893 に答える
1

これは私のためにそれをしたことです:

$(":button:contains('OK')").attr("disabled", true);
于 2012-12-17T17:30:35.437 に答える
0

Uはjqueryui関数isOpen()を使用できます。

 if( $(this).dialog("isOpen") ){
        YOUR CODE           
    } else {
        return;
    }
    $(this).dialog("close");
}
于 2014-07-23T09:24:05.663 に答える