你需要做的是使用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