使用jQuery和回调函数覆盖javascript警报/确认

时间:2011-12-22 19:58:05

标签: javascript jquery globalization

我正在开发一个全球化项目,我需要使用可以全球化的版本更新所有JavaScript确认和警报功能。我正在阅读有关此主题的一些问题,但找不到任何使用回调函数的解决方案。我知道只需用新定义的对话框替换这些函数就不会停止脚本的执行。回调函数是必要的,但我在实现时遇到了一些麻烦。

以下是我一直在使用的javascript / jQuery代码块

PromptForExit = function () {
$(document).ready(function () {
        //new confirm
        $dialog_confirm = $('<div></div>').dialog({
            resizable: false,
            height: 100,
            modal: true,
            autoOpen: false,
            buttons: {
                "Ok - Configurable": function () {
                    $(this).dialog("close");
                    return true;
                },
                "Cancel - Configurable": function () {
                    $(this).dialog("close");
                    return false;
                }
            }
        });
        //new alert
        $dialog_alert = $('<div></div>').dialog({
            resizable: false,
            height: 140,
            modal: true,
            autoOpen: false,
            buttons: {
                okVal: function () {
                    $(this).dialog("close");
                }
            }
        });
        //override alert
        window.alert = function (msg) {
            $dialog_alert.html(msg).dialog('open');
        };
        //override confirm
        window.confirm = function (msg) {
            $dialog_confirm.html(msg).dialog('open');
        };
    });

    //alert testing
    var anAlert = alert("jQuery alert");
    alert(EmptyFunc(anAlert));
    anAlert = alert("jQuery alert2");
    alert(EmptyFunc(anAlert));

    //confirm testing
    var resp = confirm("jQuery confirm");
    confirm(TempFunc(resp));
    resp = confirm("jQuery confirm 2");
    confirm(TempFunc(resp));
};

TempFunc = function (response) {
    if (response) {
        //take action if user choose OK
    }
    else {
        //different flow if they choose cancel
    }
};

EmptyFunc = function (anAlert) {
    return true;
};

现在发生的事情只是最后一次显示,“jQuery确认2”,但没有其他人。我想这是因为我的回调函数设置不正确但我也注意到在将它们设置为确认或警报后,anAlert和resp总是未定义。感谢帮助。

1 个答案:

答案 0 :(得分:0)

介绍一个消息队列。抓住close事件;如果队列为空,则什么都不做。如果不是,请调用函数弹出下一条消息并显示相应的对话框。 alert / confirm应该将消息及其类型填入队列,如果此时没有显示对话框,则调用上面的函数。