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()関数では失敗しますが、私が望むものとして機能しません。次の行、任意のアイデアを実行するダイアログですか?それとも、このようにするのは正しいですか?jQuery Deferred and Dialogbox
あなたはJavascriptが繰延オブジェクトの完了を待機させることができなくなりますので、 '復帰に方法はありません'後で。私はこれを "修正"する方法がわかりませんが、コード/ロジックを再編成する方法があると思います。 – Ian
いいえ、非同期タスクから同期的に返すことはできません。代わりに、延期! – Bergi
これは、別の関数に渡したことを意味します.nは、同じ関数の代わりに検証チェックを行うために他の関数を使用しますか?そうする正しい方法を私に少し教えてもらえますか?グローバル変数を作成し、defferendに基づいてtrue/faseに設定してから、別の関数でグローバル変数を使用してチェックを行い、その後でtrue/falseを返す関数を使用しますか?私はまだdefferedに新しい、ちょうどGoogle nのパズルを検索するそれのようなものを出す – Se0ng11