2016-07-24 7 views
0

ダイアログをロードしてユーザーがボタンをダブルクリックするのに時間がかかる場合、2つの同じダイアログが画面にポップアップします。私はそれが起こらないようにしたい。ボタンをダブルクリックして2つの同一のBoostrapダイアログが開かないようにする方法は?

$("#ShowUpCallTag").on('click', function (e) { 
     $.ajax({ 
      url: '/Ship/CallTags/Dialog/' + $(e.target).data('calltagid'), 
      type: 'get', 
      datatype: 'json' 
     }).done(function (data) { 
      var dialog = main.ship.calltags.dialog.buildDialog(data); 
      dialog.open(); 
     }); 
    }); 
+0

この解決策を確認してください。 http://stackoverflow.com/a/4491717/3585278 – Danieboy

答えて

0

あなたのコードの問題は、ダイアログが開いているかどうかわからないことだと思います。私は何になります

  1. 例えば、あなたのjQueryのコールよりも同じスコープ内の変数を作成します:var dialogOpened = false
  2. あなたのクリックハンドラ関数では、あなたのdone(function (data) {})コールバックではAJAX呼び出しにいる場合のみdialogOpened === false
  3. を行いますdialogOpenedをtrueに設定し、ブートストラップが発生したイベントを待ち受けて、ユーザーによってモーダルが閉じられたことを確認します(Bootstrap Modal Eventsを参照)
  4. モーダルが閉じられたら、dialogOpenedをfalseに戻します。
  5. 私は良い習慣であると考えているもの:クリックをバインドする要素がボタンの場合、ユーザーがクリックした直後に無効にすることができます。
+0

ありがとうございます。できます。私は以下の解決策を掲示した –

0
  var isModelDialogOpen = false; 
      $("#ShowUpCallTag").on('click', function (e) { 
      if (isModelDialogOpen == false) { 
       isModelDialogOpen = true; 

       //Popup call tag dialog. 
       $.ajax({ 
        url: '/Ship/CallTags/Dialog/' + $(e.target).data('calltagid'), 
        type: 'get', 
        datatype: 'json' 
        .done(function (data) { 
         var dialog = main.ship.calltags.dialog.buildDialog(data); 
         dialog.open(); 
        }) 
        .always(function (data) { 

         isModelDialogOpen = false; 
        }); 
      } 
     }); 
関連する問題