のためのショーのイベントは、私が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()
を呼び出します
しかし、現在選択されているタブの前に最新のタブをどのように取得できるかわかりませんでした。
あなたは、私は、最新のを覚えている、これを完了するための別の方法があると思います。この 」を行いたい場合は、 'checkPageLayoutsAreSelected'は、ページのロード –
に呼び出すことはできませんので、残念ながら、私はそれを行うことはできませんe.preventDefault()を呼び出す代わりに、現在選択されているタブの前に最新の選択されたタブを表示するので、次のようになります。 " 変数を宣言できます。 ( 'show.bs.tab'、機能(電子上、その後 'のvar selectedTab' とタブが ' $( '[データトグル= "タブ"]')のように示されているときにそれを更新します。 ){ IF(args.returnedValue ===偽){ $(selectedTab).TAB( 'ショー');} selectedTab = selectedTab = $(e.target).ATTR( "HREF"); }); –