我正面临显示警告窗口的一些问题。我想要的是显示警告窗口,然后根据用户的输入我需要执行一些操作。但我面临的问题是我从函数中收到null作为返回值。
PS:我正在使用Jquery msgbox v1.0进行提醒。
这是调用函数代码块 -
var retVal = "No"; //don't save
if($(this).parent().parent().hasClass("modified")){
retVal = showPrompt();//Null returned
}
alert(retVal);
switch (retVal) {
case "Yes":
//show download xml file on machine.
removeWorkspace(this);
break;
case "No":
removeWorkspace(this);
break;
case "Cancel":
//don't do anything
break;
}
event.stopPropagation();
});
被叫函数:
function showPrompt(){
var resultVar = null;
$.msgBox({
title: "Are you sure",
content: "Do you want to save your work?",
type: "confirm",
buttons: [{ type:"submit", value: "Yes"},
{type: "submit", value: "No"},
{type: "cancel", value: "Cancel"}]
}, function(result){
resultVar = result;
});
return resultVar;
}
提前致谢。
答案 0 :(得分:1)
在showPrompt()
函数中,resultVar
从回调中获取其值,但该函数在执行回调之前立即返回,这就是resultVar
仍然{的原因{ {1}}返回时的{1}}。
为什么不将它移动到从回调内部调用的另一个函数,而不是尝试按原样运行切换?
null
答案 1 :(得分:0)
msgBox
的行为不是alert
或confirm
:调用时,它不会挂起当前的执行线程。
您的功能在用户点击任何按钮之前返回。
解决此问题的最简单方法是从“成功”回调中调用removeWorkspace
函数:
function showPrompt(ws){
$.msgBox({
title: "Are you sure",
content: "Do you want to save your work?",
type: "confirm",
buttons: [{ type:"submit", value: "Yes"},
{type: "submit", value: "No"},
{type: "cancel", value: "Cancel"}]
, success: function(result){
switch result {
case "Yes" :
removeWorkspace(ws);
break;
case "No" :
removeWorkspace(ws);
break;
}
}});
}
// change the calling site :
if($(this).parent().parent().hasClass("modified")){
showPrompt(this);
} else {
// default action :
removeWorkspace(this);
}