Ich versuche, einen neuen Datensatz in eine Tabelle mit einzufügenDer folgende Code wird mithilfe des jQuery-Dialogfelds "Ui" und der Bestätigungsfelder angezeigt. Wenn ich auf die Bestätigungsschaltfläche doppelklicke, wird der Datensatz zweimal in die Datenbank eingefügt. Wie kann ich das verhindern?
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");
}
Antworten:
1 für die Antwort № 1Eine clientseitige Lösung ist das Hinzufügen eines Boolean:
var sent = false;
...
buttons : {
"Confirm" : function() {
if (sent) return;
sent = true;
jQuery.ajax({
Eine andere robuste Lösung wäre zu tunserverseitig die Überprüfung, dass Sie diese Daten noch nicht eingegeben haben. Ich würde dies im Allgemeinen vorziehen, da Probleme oder Angriffe außerhalb des Servers (im Browser oder im Netzwerk) auftreten können.
1 für die Antwort № 2
Das hat es für mich getan:
$(":button:contains("OK")").attr("disabled", true);
0 für die Antwort № 3
Sie können die Jquery-UI-Funktion isOpen () verwenden.
if( $(this).dialog("isOpen") ){
YOUR CODE
} else {
return;
}
$(this).dialog("close");
}