选择答案前返回对话框

Dialog returning before selecting answer

本文关键字:对话框 返回 答案 选择      更新时间:2023-09-26

我有一个弹出的对话框,询问用户一个问题,这是在下面的函数中:

function confirmBox2(action) {
    var message = "";
    if (action == "Quit") {
        message = "Are you sure you want to quit without saving?";
    }
    else if (action == "Delete") {
        message = "Confirm you want to Delete?";
    }
    else if (action == "Save") {
        message = "Are you sure you want to Save Changes?";
    }

    $('body').append('<div id="dialog-box" style="display:none;">' + message + '</div>');
    $('#dialog-box').dialog({
        modal: true,
        buttons: {
            Yes: function () {
                $(this).dialog("close");
                $('#dialog-box').remove();
                return true;
                //history.back(-1);
            },
            NO: function () {
                $(this).dialog("close");
                $('#dialog-box').remove();
                return false;
            }
        }
    });
}

您将看到"是"返回true,"否"返回false。我想做一些类似的事情

if(confirmBox2("Quit")){
    // do something here
}

我遇到的问题是,代码是异步运行的,而不是等待对话框答案被选择,我该如何解决这个问题?

感谢

我修改了确认函数以接受另外两个参数。其中一个是当您单击"是"时要调用的函数的名称,另一个是单击"否"时要呼叫的函数的姓名。您以前的版本是打开对话框,然后立即结束函数,因为对话框调用不是阻塞或同步调用,所以函数没有等到您关闭对话框才返回。这就是为什么你没有得到结果。使用此方法,您可以创建一个处理"是"单击的函数,一个处理"否"单击的函数并在单击相应按钮时调用它们。

function confirmBox2(Action, YesCallback, NoCallback) {
    var message = "";
    if (Action == "Quit") {
        message = "Are you sure you want to quit without saving?";
    } else if (Action == "Delete") {
        message = "Confirm you want to Delete?";
    } else if (Action == "Save") {
        message = "Are you sure you want to Save Changes?";
    }
    $('body').append('<div id="dialog-box" style="display:none;">' + message + '</div>');
    $('#dialog-box').dialog({
        modal: true,
        buttons: {
            "Yes" : function () {
                $(this).dialog("close");
                $('#dialog-box').remove();
                YesCallback();
            },
            "No" : function () {
                $(this).dialog("close");
                $('#dialog-box').remove();
                NoCallback();
            }
        }
    });
}
function onDialogYes() {
    // handle the "yes" click here
}
function onDialogNo() {
    // handle the "no" click here
}
confirmBox2("Quit", onDialogYes, onDialogNo);

您也可以在不将回调函数作为参数传递的情况下执行此操作,如下所示。。。

function confirmBox2(Action) {
    var message = "";
    if (Action == "Quit") {
        message = "Are you sure you want to quit without saving?";
    } else if (Action == "Delete") {
        message = "Confirm you want to Delete?";
    } else if (Action == "Save") {
        message = "Are you sure you want to Save Changes?";
    }
    $('body').append('<div id="dialog-box" style="display:none;">' + message + '</div>');
    $('#dialog-box').dialog({
        modal: true,
        buttons: {
            "Yes" : function () {
                $(this).dialog("close");
                $('#dialog-box').remove();
                onDialogYes();
            },
            "No" : function () {
                $(this).dialog("close");
                $('#dialog-box').remove();
                onDialogNo();
            }
        }
    });
}
function onDialogYes() {
    // handle the "yes" click here
}
function onDialogNo() {
    // handle the "no" click here
}
confirmBox2("Quit");

您可能希望将Action传递到按钮的事件处理程序中,这样您就知道要处理什么操作。