2017-02-23 3 views
0

のためのショーのイベントは、私がifテストを行いますこの場合。以下のように私は、ショーのイベントのデフォルト動作を防止したい、この結果に基づいて、私はAjaxの機能を呼び出し、それは私に結果を返します別のシナリオでは防止ストラップタブ

$('a[data-toggle="tab"]').on('show.bs.tab', function (e) { 
    checkPageLayoutsAreSelected(); 
    window.getLayoutAreSelectedResult = function(xhr, status, args) { 
     if(args.returnedValue === false){ 
      e.preventDefault(); 
      console.log('Hello.'); 
      return false; 
     } 
    }; 
}); 

checkPageLayoutsAreSelected()関数はajax呼び出しを実行し、成功した場合はwindow.getLayoutAreSelectedResult()関数を呼び出します。 この場合、ログされたメッセージはHelloであることに注意してください。

ここでの問題は、e.preventDefault();を呼び出してもタブが常に表示されることです。

showイベントは、ajax呼び出しが終了する前に既に起動されていると思います。

どうすればこの問題を解決できますか?

$('a[data-toggle="tab"]').on('show.bs.tab', function (e) { 

    //TODO : get the latest selected tab before this current selected tab 

    checkPageLayoutsAreSelected(); 
    window.getLayoutAreSelectedResult = function(xhr, status, args) { 
     if(args.returnedValue === false){ 
      var tab = $(".tabs").find("[data-target='"+latestSelectedTab+"']")[0]; 
      $(tab).tab('show'); 
     } 
    }; 
}); 

私たちはとても以下、現在選択されたタブの前に、最新の選択したタブを表示し、最新の選択したタブを覚えておくことで、これを完了するための別の方法があると思うし、その後、代わりのe.preventDefault()を呼び出します

しかし、現在選択されているタブの前に最新のタブをどのように取得できるかわかりませんでした。

答えて

0

原則として、ページナビゲーションとajax呼び出しをリンクすることは避けることをお勧めします。これは、UIに「ヒカップ」が追加されるためです。つまり、呼び出しが完了するまでタブが待機してから、 。

タブの内容がページの読み込み時に表示されるかどうかを決定する値を読み込み、タブのクリックではなく読み込むことをお勧めします。それらの値を隠し入力や配列に格納してチェックすると、ブラウジングの経験はOKです。

+0

あなたは、私は、最新のを覚えている、これを完了するための別の方法があると思います。この 」を行いたい場合は、 'checkPageLayoutsAreSelected'は、ページのロード –

+0

に呼び出すことはできませんので、残念ながら、私はそれを行うことはできませんe.preventDefault()を呼び出す代わりに、現在選択されているタブの前に最新の選択されたタブを表示するので、次のようになります。 " 変数を宣言できます。 ( 'show.bs.tab'、機能(電子上、その後 'のvar selectedTab' とタブが ' $( '[データトグル= "タブ"]')のように示されているときにそれを更新します。 ){ IF(args.returnedValue ===偽){ $(selectedTab).TAB( 'ショー');} selectedTab = selectedTab = $(e.target).ATTR( "HREF"); }); –