Ich habe einen Code hier, der Daten in die Datenbank einfügen wird, wird es zuerst filtern, wenn die Daten bereits vorhanden sind und Benutzer fragen, ob er fortsetzen möchte, Daten mit Bootstrap modal einzufügen. Jetzt ist das Problem nur am Ende der Schleife zu sehen, was ich will, ist jedes Mal, wenn Daten in der Datenbank gefunden wurden, wird ein Popup-Modal angezeigt.So rufen Sie bootstrap modal in einer Schleife mit jquery
$.each(person, function(index, value){
var existing = DisticntVal(value);
if(existing == 0){
InsertPerson(value);
}else{
var a = ConfirmYesNo(value['person'] + " already exist. Do you want to continue?");
a.then(function (b) {
if(b == 1){
InsertPerson(value);
}
});
}
});
function ConfirmYesNo(msg) {
var dfd = jQuery.Deferred();
var $confirm = $('#exampleModal');
$confirm.modal('show');
$('#message').html(msg);
$('#btnyes').off('click').click(function() {
$confirm.modal('hide');
dfd.resolve(1);
return 1;
});
$('#btnno').off('click').click(function() {
$confirm.modal('hide');
return 0;
});
return dfd.promise();
}
function DisticntVal(person) {
var returncount;
var nperson = JSON.stringify(person);
$.ajax({
url: 'chckdistinct.php',
type: 'post',
data: {person: nperson},
async: false,
success: function(response) {
returncount = response;
},
error: function(xhr, desc, err) {
console.log(xhr);
console.log("Details: " + desc + "\nError:" + err);
}
});
return returncount;
}
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p id="message"></p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal" id="btnno">No</button>
<button type="button" class="btn btn-primary" id="btnyes">Yes</button>
</div>
</div>
</div>
</div>
Benötigen Sie mit diesem helfen.
"Es zeigt nur am Ende der Schleife". Ok, aber da wir Ihre Daten nicht sehen können und wir nicht sehen können, was die 'DisticntVal' _ [sic] _ Funktion tut, können wir nicht wirklich sagen, ob das das richtige Verhalten ist oder nicht. – ADyson
Was ich versuche zu tun ist wie confirm() - Funktion von Javascript, die Schleife, bis Button Ereignis geklickt hat, dann weitermachen. – JRM
ConfirmYesNo unterbricht die Ausführung nicht, es macht nur das bisschen HTML (das Modal) sichtbar und geht dann weiter. Bevor der Benutzer die Möglichkeit erhält, auf das Modal zu reagieren, wird die Schleife immer wieder fortgesetzt, wobei jedoch die modalen Inhalte und Ereignisbehandlungsroutinen mit den neuesten Inhalten überschrieben werden. Die älteren Versprechen usw. werden niemals gelöst. Ein weiterer Hinweis: Async: False ist eine schlechte Idee. Es führt zu einer schlechten Benutzererfahrung (der Browser ist für die Dauer der Ajax-Anfrage gesperrt und es kann nichts angeklickt werden) und ist auch schon veraltet, so dass der Browser das Feature wahrscheinlich in Zukunft entfernen wird. – ADyson