获取jquery-confirm以返回值

时间:2016-08-11 17:49:53

标签: javascript jquery

我正在使用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;
}

如何更正代码,以及为什么调试代码无序执行(是否与函数中的返回值有关)?

1 个答案:

答案 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中的异步调用。