我正在编写一些表单验证函数,并且由于灵活性,我决定使用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
编辑:
我已经选择了另一种解决此问题的方法。我将最接近的解决方案标记为答案,以防其他人选择他的方法。谢谢大家!
答案 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") {
...
}
};