我正在使用jquery-confirm(https://craftpip.github.io/jquery-confirm/)来确认表单上的取消,但它无效。我的函数没有返回jquery确认的结果:
function cnf(cntn, fn, prm) {
var res = false;
$.confirm({
title: "",
content: cntn,
confirmButton: "Yes",
cancelButton: "No",
confirm: function() { res = true; fn(prm); },
cancel: function() { }
});
return res;
}
function emptyfn() { }
function link() {
return cnf("Cancel changes?", emptyfn);
}
...
<form method="post" action="whatever.php">
<label for="test">Test Input</label>
<input type="text" class="form-control" id="test" maxlength="40" name="test" autofocus>
<input type="submit" name="button" value="Submit" class="btn-primary">
<input type="submit" name="button" value="Cancel" class="btn-primary" onclick="return link();" formnovalidate>
</form>
(我知道我不需要&#34; fn&#34;和#34; prm&#34;在这个例子中,但我试图将代码概括为在其他地方使用)。
当我尝试通过添加警报调试代码时,事情变得奇怪,警报出现在确认之前:
function link() {
var tmp = cnf("Cancel changes?", emptyfn);
alert(tmp);
return tmp;
}
如何更正代码,以及为什么调试代码无序执行(是否与函数中的返回值有关)?
答案 0 :(得分:-2)
您的代码不起作用,因为javascript不会等到$ .confirm执行,因为它是异步函数。使用回调函数的最简单方法。
function workWithRes() {
...
res = true;
//and some stuff that should executed after confirm created
}
var res = false;
function cnf(cntn, fn, prm, callbackFn) {
$.confirm({
title: "",
content: cntn,
confirmButton: "Yes",
cancelButton: "No",
confirm: function() { fn(prm); callbackFn(); },
cancel: function() { }
});
}
对于其他一些解决方案,请阅读javascript中的异步调用。