你需要做的是使用jQuery.deferred /承諾。
http://api.jquery.com/deferred.promise/
在這個例子中,asyncEvent
1)創建一個jquery推遲對象
2)具有用於解決/拒絕,您的確定邏輯/取消
3)返回一個deferred.promise()對象,然後可以與$ .when一起使用來確定延遲對象是否已解析或拒絕(ok/cancel)。
你會做什麼是
1)創建一個jQuery Deferred對象
2)啓動您的對話,以確定/取消設定deferred.resolve /拒絕
3)返回一個deferred .promise()對象,
4)使用延遲承諾的對象與$。當 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");
});
你也可以只使用決心,並確定是否確認是在$。當真或假,
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");}
});
希望有所幫助。
在jQuery 3.1.0和jQuery UI 1.12.0嘗試創建確認對話框之後,還有其他一些例子。在運行'$ .when()'之前創建一個默認變量。發現在$ .when()完成之前變量已經通過。任何建議或建議? – Twisty
僅供參考 - 我發現我的問題。我正在使用匿名函數,執行後會丟失裏面的變量。轉到已經定義的功能有所幫助。 – Twisty