感谢您对此进行调查:
主页(加载选项卡的位置):
<ul class="css-tabs">
<li><a href="controller1/getOne">1</a></li>
<li><a href="controller1/getTwo">2</a></li>
<li><a href="controller2/getThree">3</a></li>
</ul>
<div class="css-panes">
<div id="dynamic-pane"></div>
<div id="dynamic-pane"></div>
<div id="dynamic-pane"></div>
</div>
<!-- activate tabs with JavaScript -->
<script>
$(function() {
$("ul.css-tabs").tabs("div.css-panes > div.#dynamic-pane", {
history: true,
effect: 'fade',
onBeforeClick: function(event, i) {
var pane = this.getPanes().eq(i);
pane.load(this.getTabs().eq(i).attr("href"));
}
});
});
</script>
第二个选项卡通过 JQuery 工具的“href”方法从 controller2 加载内容。然后,这样的内容是一个带有 JS 的 HTML 文件,它会进行另一个 AJAX 调用:
<script src="../js/secondTab.js"></script>
<script>$(document).ready(function() { showLeftPanel(); showRightPanel(); }); </script>
<div id="dynamic-content-left"> </div>
<div id="dynamic-content-right"> </div>
JS 脚本包含如下内容:
function showLeftPanel(){
$.ajax({
type: "POST",
url: "controller2/showLeftPanel",
contentType: "html",
success: function(response) {
$("#dynamic-content-left").html(response);
}
});
};
function showRightPanel(){
$.ajax({
type: "POST",
url: "controller2/showRightPanel",
contentType: "html",
success: function(response) {
$("#dynamic-content-right").html(response);
}
});
};
之所以这样,是因为这个项目有smarty,使用render()方法返回“一段HTML代码”来完成页面。
这里一切正常,但是当我转到第三个选项卡时,只显示左侧面板,我必须重新加载页面才能修复它,例如,右侧面板显示
我认为这个问题可能与选项卡加载内容的方式以及 AJAX 没有在第二个选项卡中加载内容有关,因为它 "$(document).ready(function({});" 是已经在上一个选项卡(选项卡 2)中加载。一旦我重新加载页面,文档就会刷新,然后执行一个新的 AJAX 调用。
希望这是有道理的。
P.S 相同的过程适用于第三个选项卡,相同的脚本结构。改变的是 HTML 文件的内容(网页内容)。