Javascript 让jquery确认返回一个值

Javascript 让jquery确认返回一个值,javascript,jquery,Javascript,Jquery,我正在使用jquery confirm确认表单上的取消,但它不起作用。我的函数不返回jquery确认的结果: function cnf(cntn, fn, prm) { var res = false; $.confirm({ title: "", content: cntn, confirmButton: "Yes", cancelButton: "No", confirm: function()

我正在使用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>
function link() {
    var tmp = cnf("Cancel changes?", emptyfn);
    alert(tmp);
    return tmp;
}

我如何更正代码,为什么调试代码的执行顺序不正确?这与函数中的返回值有关吗?

您的代码不工作,因为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中的异步调用。

不可能。。。。。JavaScript中没有等待,因此您不能暂停异步调用,这就是为什么当用户做出选择时脚本会回调。@据我所知,如果调用本机警报,它将停止脚本执行,直到您关闭警报窗口是,因为本机警报、确认、提示就是这样工作的。你不能在JavaScript中重新创建该功能。哦,这太糟糕了,我讨厌本机的alert和confirm,它们看起来很垃圾,按钮无法定制。那么就不要使用它,正确地编写代码以获得更好的外观。好吧,我不同意使用res变量,这是我的一个错误。但是,使用包含document.getElementByIdform.submit的回调确实可以做到这一点。