我正在转换到jquery 1.9并使用.on,过去我过分依赖.live()当然生活很棒,现在事情再一次显得非常复杂。
我正在尝试将动态内容加载到某些引导标签中。但是。在显示#ticketnotes时,我无法弄清楚如何触发ajax调用。
Html如下:
<div class="tabbable ticket_tabs">
<ul class="nav nav-tabs" id="tickettabs">
<li class="active">
<a href="#ticketreplies" data-toggle="tab">Replies</a>
</li>
<li >
<a class="tabtickets" href="#ticketnotes" data-toggle="tab">Ticket Notes</a>
</li>
<li>
<a href="#timetrackticket" data-toggle="tab">Time Track</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="ticketreplies">
$body
$replyForm
</div>
<div class="tab-pane" id="ticketnotes">
<div class="well">
<div class="loader" style="display:none;">
</div>
</div>
$replyForm
</div>
<div class="tab-pane" id="timetrackticket">
<div class="well">time track info</div>
</div>
</div>
当页面加载时,“票据回复”已经存在,但看到我想如何将加载时间保持在最低限度,我宁愿单独加载所有相关数据,查看票证并不一定意味着某人将要通过笔记,因此无需立即加载它。
我上次的尝试看起来像是:
$('#tickettabs').on('show', '.tabtickets', function(){
if($('#ticketnotes').is(":visible")){
alert("hi");
}
});
不用说,它从来没有说过嗨。
在firefox中运行完全相同的if条件可以正常工作。所以我非常确信问题在于我是如何尝试绑定事件处理程序的。
我提前感谢你们帮助我解决了我的理智:。
答案 0 :(得分:1)
这是因为当show事件被触发时,浏览器可能没有时间重新绘制dom。
可能的解决方案是使用0延迟的超时功能。
$('#tickettabs').on('show', '.tabtickets', function(e){
setTimeout(function(){
if($('#ticketnotes').is(":visible")){
alert("hi");
}
}, 0)
});
演示:Plunker
另一个解决方案是检查单击了哪个标题页
$('#tickettabs').on('show', '.tabtickets', function(e){
if($(this).has('a.tabtickets')){
alert('has tabtickets')
}
});
答案 1 :(得分:0)
我认为这是最好的选择:
//the reason for the odd-looking selector is to listen for the click event
// on links that don't even exist yet - i.e. are loaded from the server.
$('#tabs').on('click','.tablink,#prodTabs a',function (e) {
e.preventDefault();
var url = $(this).attr("data-url");
if (typeof url !== "undefined") {
var pane = $(this), href = this.hash;
// ajax load from data-url
$(href).load(url,function(result){
pane.tab('show');
});
} else {
$(this).tab('show');
}
});
在内容内链接上使用.tablink类,以在标签之间进行链接。参见JS中的注释。 HTML
<div id="tabs">
<ul class="nav nav-tabs" id="prodTabs">
<li class="active"><a href="#tab_basic">Basic</a></li>
<li><a href="#tab_images" data-url="?action=images">Images</a></li>
<li><a href="#tab_videos" data-url="?action=videos">Videos</a></li>
</ul>
<div class="tab-content">
<div id="tab_basic" class="tab-pane active"></div>
<div id="tab_images" class="tab-pane active"></div>
<div id="tab_videos" class="tab-pane active"></div>
</div>
</div>
原文:https://coderwall.com/p/1lnxba/load-bootstrap-tabs-dynamically 改编:http://www.bootply.com/63891