Co trzeba zrobić, to użyć jQuery.deferred/obietnicy.
http://api.jquery.com/deferred.promise/
W tym przykładzie asyncEvent
1) tworzy jquery odroczone obiekt
2) ma logiczny dla determinacji/odrzucić swoją OK/Cancel
3) zwraca Obiekt deferred.promise(), który może być następnie użyty z $ .when w celu ustalenia, czy obiekt odroczony został rozwiązany lub odrzucony (ok/anuluj).
Co byś zrobił to
1) utworzyć jquery odroczone obiekt
2) Uruchom okno dialogowe, z ok/anulować ustawienie deferred.resolve/odrzucić
3) zwracają odroczony .promise() obiektu,
4) Użyj odroczony obiekt obietnica z $ .Przy http://api.jquery.com/jQuery.when/
function customConfirm(customMessage) {
var dfd = new jQuery.Deferred();
$("#popUp").html(customMessage);
$("#popUp").dialog({
resizable: false,
height: 240,
modal: true,
buttons: {
"OK": function() {
$(this).dialog("close");
alert(true);
dfd.resolve();
},
Cancel: function() {
$(this).dialog("close");
alert(false);
dfd.reject();
}
}
});
return dfd.promise();
}
$.when(customConfirm('hey')).then(
function() {
alert("things are going well");
},
function() {
alert("you fail this time");
});
Można też po prostu użyć determinację i określić, czy potwierdzić było prawdziwe lub fałszywe w $ .Przy,
function customConfirm(customMessage) {
var dfd = new jQuery.Deferred();
$("#popUp").html(customMessage);
$("#popUp").dialog({
resizable: false,
height: 240,
modal: true,
buttons: {
"OK": function() {
$(this).dialog("close");
alert(true);
dfd.resolve(true);
},
Cancel: function() {
$(this).dialog("close");
alert(false);
dfd.resolve(false);
}
}
});
return dfd.promise();
}
$.when(customConfirm('hey')).then(
function(confirm) {
if(confirm){alert("things are going well");}
else{alert("you fail this time");}
});
nadzieję, że pomoże.
Po tym i innych przykładach z jQuery 3.1.0 i jQuery UI 1.12.0 próbuje utworzyć okno dialogowe potwierdzenia. Tworzyłem domyślną zmienną przed uruchomieniem '$ .when()'. Okazało się, że zmienna została przekazana przed zakończeniem '$ .when()'. Wszelkie sugestie lub porady? – Twisty
FYI - Znalazłem mój problem. Używałem anonimowej funkcji, a zmienne wewnątrz byłyby utracone po wykonaniu. Przeniesienie do funkcji, która została już zdefiniowana, pomogło. – Twisty