使用jQueryUI从用户获取布尔值

时间:2012-06-06 15:02:59

标签: javascript jquery jquery-ui dialog callback

我正在编写一些表单验证函数,并且由于灵活性,我决定使用jQueryUI来提示用户。

这有一个小问题。我希望我的函数返回一个数组,该数组包含一个布尔值和一个字符串,用于我的错误报告系统。 JQueryUI对话框是异步的,这意味着浏览器不会挂起并等待返回值,因为本机提示符()会。

以下是一些示例代码:

验证器功能:

function verifyTOS_PVM_v2()
{
    verifyTOS_PVM_v2_callback = '';
    if(!empty($('#inputPVM').val())) {
        $('#inputPVM').val(date('d.m.Y', parseFinnishDate($('#inputPVM').val())));
        val = $('#inputPVM').val()
        date = parseFinnishDate($('#inputPVM').val());
        today = today();
        diff = Math.floor((date - today)/60/60/24);
        if(diff <= -14)
        {
            buttons = 
                [
                    {
                        text:"Kyllä",
                        click:function()
                        {
                            $(this).dialog('destroy');
                            verifyTOS_PVM_v2_callback = "Kyllä"
                        }
                    },
                    {
                        text:"Ei",
                        click:function()
                        {
                            $(this).dialog('destroy');
                            verifyTOS_PVM_v2_callback = "Ei"
                        }
                    }
                ]
            jQueryPrompt('Message', 'Koskien päivämäärää...', 400, buttons);
            while(verifyTOS_PVM_v2_callback != "Kyllä" && verifyTOS_PVM_v2_callback != "Ei")
            {
                setTimeout('i = i + 1', 50)
            }
            res = verifyTOS_PVM_v2_callback;
            if(res == "Kyllä")
            {
                error_occured = 2;
                error = 'Message'
            }
            else
            {
                error_occured = 1;
                error = 'Message'
            }
        }
    } else {
        error_occurred = 1;
        error = "Message";
    }
    reterr[0] = error_occurred;
    reterr[1] = error;
    return reterr;
}

提示功能:

function jQueryPrompt(msg, title, width, buttons)
{
    $('body').append('<div id="jQueryPromptHost"></div>');
    $('#jQueryPromptHost').append(msg);
    $('#jQueryPromptHost').dialog({
        title: title,
        resizable: false,
        width: width,
        daraggable: false,
        modal: true,
        buttons: buttons
    })
}

我已经尝试过对变量进行轮询并且失败了(firefox刚挂了并为自己留下了更多内存......)

你有什么建议吗?

此致

Akke

编辑:

我已经选择了另一种解决此问题的方法。我将最接近的解决方案标记为答案,以防其他人选择他的方法。谢谢大家!

2 个答案:

答案 0 :(得分:1)

while循环锁定时,你无法使用它。

必须将功能分解为两部分。第一部分是调用对话框之前的代码,第二部分是对话框之后的部分。单击对话框按钮调用第二个函数。

如果代码必须是同步的,那你就有点运气了,并且坚持使用丑陋的window.prompt。

答案 1 :(得分:1)

click事件处理程序中,只需调用函数而不是赋值。

buttons = [
    {
        text:"Kyllä",
        click: function() {
            $(this).dialog('destroy');
            handleButtonClick("Kyllä");
            //verifyTOS_PVM_v2_callback = "Kyllä"
        }
    },
    {
        text:"Ei",
        click: function() {
            $(this).dialog('destroy');
            handleButtonClick("Ei");
            //verifyTOS_PVM_v2_callback = "Ei"
        }
    }
]

//Somewhere else in the code
var handleButtonClick = function(value) {
    if (value == "Kyllä") {
        ...
    } else if (value == "Ei") {
        ...
    }
};