【发布时间】:2013-11-13 12:55:53
【问题描述】:
我的页面上有一些“静态”HTML:
<div id="DIVISIONS">
<ul class="nav nav-tabs" id="DIVISIONTABS">
@* <li> nodes will be injected here by javascript *@
</ul>
<div class="tab-content" id="DIVISIONTABPANES">
@* <div class="tab-pane"> nodes will be injected here by javascript *@
</div>
</div>
在页面加载时,我创建了一个选项卡“框架”,即创建引导选项卡和选项卡内容容器。
我通过以下方式触发该过程:
$(window).bind("load", prepareDivisionTabs);
而“prepareDivisionTabs”就是这样做的:
function prepareDivisionTabs() {
// Retrieve basic data for creating tabs
$.ajax({
url: "@Url.Action("GetDivisionDataJson", "League")",
cache: false
}).done(function (data) {
var $tabs = $('#DIVISIONTABS').empty();
var $panes = $('#DIVISIONTABPANES').empty();
for (var i = 0; i < data.length; i++) {
var d = data[i];
$tabs.append("<li><a href=\"#TABPANE" + d.DivisionId + "\" data-toggle=\"tab\">" + NMWhtmlEncode(d.Name) + "</a></li>");
$panes.append("<div id=\"TABPANE" + d.DivisionId + "\" class=\"tab-pane\"></div>")
}
renderDivisionTabPaneContents(data);
}).fail(function (err) {
alert("AJAX error in request: " + JSON.stringify(err, null, 2));
});
}
关于信息,上面的“renderDivisionTabPaneContents”是这样做的:
function renderDivisionTabPaneContents(data) {
for (var i = 0; i < data.length; i++) {
var d = data[i];
renderDivisionTabPaneContent(d.DivisionId);
}
}
function renderDivisionTabPaneContent(id) {
var $tabPane = $('#TABPANE' + id);
$tabPane.addClass("loader")
$.ajax({
url: "/League/GetDivisionPartialView?divisionId=" + id,
cache: false
}).done(function (html) {
$tabPane.html(html);
}).fail(function (err) {
alert("AJAX error in request: " + JSON.stringify(err, null, 2));
}).always(function () {
$tabPane.removeClass("loader")
});
}
到目前为止一切顺利。我的页面加载,我的标签内容被渲染,当我点击不同的标签时,相关的内容就会显示出来。
现在,我不想在开始时加载所有内容,而是想通过使用选项卡的“显示”事件即时加载选项卡内容。为了测试这一点,我只想确保在显示选项卡时可以收到一个 javascript 警报。因此,我创建以下内容来触发选项卡显示事件的附件:
$(function () {
attachTabShownEvents();
})
调用:
function attachTabShownEvents() {
$(document).on('shown', 'a[data-toggle="tab"]', function (e) {
alert('TAB CHANGED');
})
}
因此,我希望在更改选项卡后看到“TAB CHANGED”警报。但是......我没有看到任何警报。
有人可以帮我吗?
【问题讨论】:
-
你试过用
$(prepareDivisionTabs);替换$(window).bind("load", prepareDivisionTabs);吗? -
我会试一试并报告,但目前这部分过程似乎很好,因为在“prepareDivisionTabs”期间创建的选项卡工作正常。这只是我尝试添加的后续事件处理程序不起作用。更新:刚刚进行了建议的更改并且行为是相同的(即选项卡在屏幕行为方面起作用,但仍然不会触发“显示”事件)。
-
哦,我相信事件绑定应该是
shown.bs.tab,而不是shown -
"shown.bs.tab" 破解了!非常感谢“风”。
标签: javascript jquery twitter-bootstrap tabs