2016-03-30 13 views
0

jQuery UIで確認ダイアログが表示されます。
私は(yesまたはnoか)のユーザーの反応後に適切な行動を取るしようとしている:私の場合は確認ダイアログが表示された後、適切な処置をとる

$("button").click(function() { 
    if (showDialog('Do you want to continue?')) { 
    console.log("yes"); 
    } else { 
    console.log("no"); 
    } 
}); 

function showDialog(message) { 
    var dfd = new $.Deferred(); 
    $("#dialog").dialog({ 
    modal: true, 
    buttons: { 
     "Yes": function() { 
     dfd.resolve(); 
     $(this).dialog("close"); 
     }, 
     "No": function() { 
     $(this).dialog("close"); 
     } 
    } 
    }); 
    $("#dialog").html(message); 
} 

、私はいつもnoを取得します。

また、noは、ボタンをクリックする前に表示されます。だから私はこれが非同期だと仮定します。それを防ぐ方法はありますか?

Here is a fiddle

+0

なぜあなたは '$ .Deferred()'を使用していますか? – j08691

答えて

3

あなたが延期と正しい道にしているが、それが解決するか拒否するために、あなたが実際に聞いていなかった。ここで

 $("button").click(function() { 
      showDialog('Do you want to continue?').then(function() { 
       console.log("yes"); 
      }, function() { 
       console.log("no"); 
      }) 
     }); 

     function showDialog(message) { 
      var dfd = new $.Deferred(); 
      $("#dialog").dialog({ 
       modal: true, 
       buttons: { 
        "Yes": function() { 
         dfd.resolve(); 
         $(this).dialog("close"); 
        }, 
        "No": function() { 
         dfd.reject(); 
         $(this).dialog("close"); 
        } 
       } 
      }); 
      $("#dialog").html(message); 
      return dfd; 
     } 

あなたのフィドルは仕事に更新されましたhttps://jsfiddle.net/v86bc028/1/

編集 - 秒のフィドルは両方のボタンのために使用される解決を示します https://jsfiddle.net/35edpgxp/1/

+0

クリックしたボタンとは関係なく、実行する必要のあるコードを指定する方法はありますか? – user1170330

+0

解決と拒否を使用する必要はありません。両方のケースで解決を呼び、いくつかの情報を渡すことができます。成功ハンドラ関数(then()に渡された最初の関数)の情報にアクセスします。 – mcgraphix

+0

私はあなたがそれをやる方法を示す私の答えにもう一つの謎を追加しました。 – mcgraphix

0

$.Deferredを使用する必要はありません。また、ユーザーが「はい」または「いいえ」ボタンを押したときに発生するロジックは、「ボタン」設定オプションで提供される機能に含まれている必要があります。このように:

$("button").click(function() { 
 
    showDialog('Do you want to continue?'); 
 
}); 
 

 
function showDialog(message) { 
 
    $("#dialog").dialog({ 
 
    modal: true, 
 
    buttons: { 
 
     "Yes": function() { 
 
     \t console.log('yes'); 
 
     $(this).dialog("close"); 
 
     }, 
 
     "No": function() { 
 
     console.log('no'); 
 
     $(this).dialog("close"); 
 
     } 
 
    } 
 
    }); 
 
    $("#dialog").html(message); 
 
}

関連する問題