【发布时间】:2012-11-25 09:15:41
【问题描述】:
function ValidateField(){
var bAllow= true;
//some checking here
if (bAllow == true && apl.val().trim() == "")
{
showDialog();
showDialog().done(function() {
return true; // wanna return true, but not success
}).fail(function() {
return false; //wanna return false, but not success
});
return false; //stop it to execute to next line
}
return bAllow; //success return }
function showDialog(){
var def = $.Deferred();
var modPop = '<div id="diaCom" title="Information?"><p>something something</p></div>';
$("#diaCom").remove();
$(modPop).appendTo('body');
$("#diaCom").dialog({
resizable: false,
draggable: false,
height:150,
width:300,
modal: true,
buttons: {
"Ok": function() {
def.resolve();
$(this).dialog("close");
},
"Cancel": function() {
def.reject();
$(this).dialog("close");
}
}
});
return def.promise();
}
//on click
if (validateField() == true){
//do something
}else{
//do something
}
大家好,有机会返回价值吗?我希望通过 showDialog().done() 返回 true 和 false 并且 validatefield() 函数失败,但它不能按我想要的方式工作,我不能分配给 bAllow 因为我已经有一个 return false 持有执行下一行的对话框,知道吗?或者这样做是正确的?
【问题讨论】:
-
您将无法使 Javascript 等待延迟对象的完成,因此以后无法
return。我不确定如何“解决”这个问题,但我认为方法是重新组织你的代码/逻辑 -
不,您不能从异步任务同步返回。相反,通过延迟!
-
所以意味着我传递给另一个函数,n 使用另一个函数来进行验证检查而不是同一个函数?可以告诉我一些正确的方法吗?创建一个全局变量,根据deferend将其设置为true/fase,然后在另一个函数中,使用全局变量进行检查,然后使用函数返回true/false?我还是新手,只是通过谷歌搜索并解开它,出来这样的东西
-
我想不出任何代码可以使用它进行与我想要的相同的检查
-
猜猜我放弃了使用 Dialog 来返回任何东西,而不是返回,我删除了取消按钮,所以会显示一条消息,说由于满足某些条件需要再次单击提交按钮,用户需要再次点击按钮才能提交表单
标签: javascript jquery jquery-ui