Bootstrap tabs shown 事件仅在第一次触发,在第二次或以后的 tab 切换时不会触发
Bootstrap tabs shown event only fires the first time and not on second or later tab switches
我使用的是 Bootstrap 版本 3.3.5,并且有一个带有两个选项卡的视图,可以在两个内容窗格之间切换。我为 'comments' 窗格的选项卡切换发生时设置了一个监听器。它第一次点火。但是,如果我再次(或多次)在选项卡之间来回切换,该事件将不会再次触发。
$('#commentsTab').on('shown.bs.tab', function (e) {
console.log("do stuff here");
});
这是选项卡 html:
<ul class="nav nav-pills side-tabs" role="tablist">
<li class="side-tab hidden-md hidden-lg" ng-class="oneColumn ? 'active' : ''" role="presentation">
<a href="" data-target="#topcard" data-toggle="tab" role="tab">{{title}}</a>
</li>
<li class="side-tab" ng-class="oneColumn ? '' : 'active'" role="presentation">
<a href="" data-target="#notes" data-toggle="tab" role="tab"><i class="fa fa-clone"></i>Notes</a>
</li>
<li role="presentation" class="side-tab">
<a id="commentsTab" class="comments-tab" href="" data-target="#comments" data-toggle="tab" role="tab"><i class="fa fa-comment-o"></i>Feedback</a>
</li>
</ul>
任何人都知道如何进行这项工作,以便每次切换到选项卡时我都能可靠地获取事件?
经过更多调查,我发现了问题 - post万一它对任何人都有帮助...
我在选项卡元素上有一个 angular 指令,该指令也注册了相同的选项卡显示事件。我忘记了它在第一次之后从事件中取消注册(unbind())。
显然,这一行解除了与所显示事件的所有已注册函数的绑定,而不仅仅是它本身。
elem.unbind('shown');
因此,我将其重组为使用命名函数并仅取消绑定该函数(如 answer 中所示):
var unbind = function (elem) {
elem.unbind('shown', scope.scrollFn);
};
scope.scrollFn = function (elem) {
//do stuff here
unbind(elem);
};
elem.on('shown.bs.tab', scope.scrollFn);
现在取消绑定不会影响我在原始 post 中为显示的事件注册的其他功能。
我使用的是 Bootstrap 版本 3.3.5,并且有一个带有两个选项卡的视图,可以在两个内容窗格之间切换。我为 'comments' 窗格的选项卡切换发生时设置了一个监听器。它第一次点火。但是,如果我再次(或多次)在选项卡之间来回切换,该事件将不会再次触发。
$('#commentsTab').on('shown.bs.tab', function (e) {
console.log("do stuff here");
});
这是选项卡 html:
<ul class="nav nav-pills side-tabs" role="tablist">
<li class="side-tab hidden-md hidden-lg" ng-class="oneColumn ? 'active' : ''" role="presentation">
<a href="" data-target="#topcard" data-toggle="tab" role="tab">{{title}}</a>
</li>
<li class="side-tab" ng-class="oneColumn ? '' : 'active'" role="presentation">
<a href="" data-target="#notes" data-toggle="tab" role="tab"><i class="fa fa-clone"></i>Notes</a>
</li>
<li role="presentation" class="side-tab">
<a id="commentsTab" class="comments-tab" href="" data-target="#comments" data-toggle="tab" role="tab"><i class="fa fa-comment-o"></i>Feedback</a>
</li>
</ul>
任何人都知道如何进行这项工作,以便每次切换到选项卡时我都能可靠地获取事件?
经过更多调查,我发现了问题 - post万一它对任何人都有帮助...
我在选项卡元素上有一个 angular 指令,该指令也注册了相同的选项卡显示事件。我忘记了它在第一次之后从事件中取消注册(unbind())。
显然,这一行解除了与所显示事件的所有已注册函数的绑定,而不仅仅是它本身。
elem.unbind('shown');
因此,我将其重组为使用命名函数并仅取消绑定该函数(如 answer 中所示):
var unbind = function (elem) {
elem.unbind('shown', scope.scrollFn);
};
scope.scrollFn = function (elem) {
//do stuff here
unbind(elem);
};
elem.on('shown.bs.tab', scope.scrollFn);
现在取消绑定不会影响我在原始 post 中为显示的事件注册的其他功能。