【问题标题】:How to pre-load all tabs by default with jQuery如何使用 jQuery 默认预加载所有选项卡
【发布时间】:2010-09-10 03:38:28
【问题描述】:

如果我有 4 个选项卡,其中前 2 个加载了 ajax,最后 2 个是静态的,我如何默认预加载 2 个 ajax 选项卡?

目前,只有第一个选项卡会自动加载,第二个选项卡会在单击时加载。我希望它们都被加载,以便当我单击第二个时,内容已经加载。我试图像这样在第二个选项卡上调用加载事件:

$(document).ready(function () {
    $("#main-tabs").tabs({
        cache: true
    });

    $("#main-tabs").tabs("load", 1);
});

这会加载第二个选项卡,但出于某种奇怪的原因,第一个选项卡根本没有加载;甚至当我单击不同的选项卡并单击第一个选项卡时,它也不会加载。

然后我尝试了这样的事情:

$(document).ready(function () {
    $("#main-tabs").tabs({
        cache: true
    });

    $("#main-tabs").tabs("load", 0);
    $("#main-tabs").tabs("load", 1);
});

同样的结果,第二个标签被加载,第一个没有。

如何自动加载它们(ajax 的)?

【问题讨论】:

    标签: jquery-ui jquery jquery-tabs


    【解决方案1】:

    问题的根源

    两个事实:

    • 当 jQuery 使用其load 方法加载选项卡时,如果另一个 AJAX 加载请求正在进行中,这将被中止(可能是因为如果您选择一个选项卡并通过 AJAX 加载,然后快速选择另一个要加载的选项卡, jQuery 假定您不想同时加载这两个 - 只是最后一个)。
    • 当您将第一个选项卡设置为由 AJAX 加载时,默认情况下会调用.tabs("load",0) 来填充第一个选项卡。

    结合这两个事实,你就会明白发生了什么。 load 首先被调用以填充第一个选项卡,然后再次调用以填充第二个选项卡。第二个负载抵消了第一个负载。

    可能的解决方案

    由于您不能同时在同一个标​​签菜单上发出多个loads,我们将不得不寻找另一种方法。此解决方案使用选项卡的load 选项按顺序加载每个选项卡。换句话说,当一个加载完成时,它开始加载下一个。当那个完成后,它会加载下一个,依此类推。

    //the indexes to be loaded.
    //In your case it's only index 1 (index 0 is loaded automatically)
    var indexesToLoad = [1];
    
    var loadNextTab = function() {
        if (indexesToLoad.length == 0) return;
        var index = indexesToLoad.shift();
        $("#main-tabs").tabs("load",index);
    };
    
    $("#main-tabs").tabs({
        cache: true,
        load: loadNextTab
    });
    

    此方法的可能改进:

    • 与其指定要加载的索引,不如让它自己弄清楚哪些选项卡是 AJAX 选项卡并加载它们
    • 使 loadNextTab 可以同时用于多个选项卡式菜单
    • 使其可与其他加载回调函数集成(如果这是一个词)

    我如何发现问题所在?

    通过使用firebug。它是 Firefox 的插件。 Firebug 在其控制台中显示所有 AJAX 请求,并且如屏幕截图所示,弄清楚发生了什么并不难 :) 我真的推荐它。 (大多数主流浏览器都有类似的工具 - 在 chrome 或 F12 i IE 中按 ctrl+shift+j。)

    【讨论】:

    • 是的,我知道萤火虫,我有它并且经常使用它来做一些事情,但是我需要学习如何正确使用它。我必须进一步探索它...感谢您的修复。我还没有尝试过,但我理解这个问题以及它发生的原因,你的解决方案非常有意义。
    猜你喜欢
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多