2016-10-19 2 views
0

私は、削除、非アクティブ化、または読み込みとしてマークする行を持っています。ここでは、削除と非アクティブ化のために、ブートボックスのモーダルウィンドウで警告を表示しますが、 'マークして読み込み'には警告は必要ありません。 massのクラス名を解雇されている3つのボタンがあります。IFブロックが実行される前にIF条件が実行された後の文

$('.mass').click(function(e){ 
    e.preventDefault(); 
    var action = $(this).attr("data-action"); 

    // see action and warn as necessary. 
    var goon = false; // decided to use goon to see if execution should continue or not, after my attempts without it failed 
    if (action == 'delete') { 
     //warn 
     bootbox.confirm('Sure Delete?' function(choice) { 
      goon = choice; //will be false or true 
     }); 
    } else if (action == 'deactivate') { 
     bootbox.confirm('Deactivate?', function(choice) { 
      goon = choice; 
     }); 
    } else { // we don't need warning 
     goon = true;  
    } 

    alert(goon); // to see 
    if (goon == false) { 
     return false; 
    } 
    //continue to server processing her 
}); 

さて問題はcancelまたはokがクリックされる前に、モーダルウィンドウが表示されたときにalert(goon)は/前に解雇されています。常にfalseです。 ifブロック全体は効果がないようです。 「キャンセル」または「OK」をクリックすると、すでにプロセスが完了しているため、もう実行されません。

私は迷っていますか?

答えて

0

bootboxを使ったことがないが、そのドキュメントから自分から: http://bootboxjs.com/documentation.html

bootbox.alert("Your message here…", function(){ /* your callback code */ }) 

JavaScriptを非同期である、それが実行される前、あなたのコードは、「待機」しません。

あなたがしたいことは、IFをコールバックブロックに移動することです。 このようにして、アラートが閉じられると評価されます。

1

あなたのロジックには、ブートボックスから返された値で何もしないので、欠陥があります。代わりに、すぐにgoon(常にデフォルト状態のfalse)をチェックし、続けてください。

これを修正するには、ブートボックスが操作されたときにだけ呼び出される関数にロジックを抽出することができます。試してみてください:

$('.mass').click(function(e){ 
    e.preventDefault(); 
    var action = $(this).attr("data-action"); 

    if (action == 'delete') { 
     bootbox.confirm('Sure Delete?' function(choice) { 
      choice && performAction(action);     
     }); 
    } else if (action == 'deactivate') { 
     bootbox.confirm('Deactivate?', function(choice) { 
      choice && performAction(action); 
     }); 
    } else { 
     performAction(action); 
    } 
}); 

function performAction(action) { 
    // continue to server processing her 
} 
+0

ありがとうございます。私はそのような方法を知らなかった。初心者、ありがとう。それを試し、何が起こるか見る。 –

関連する問題