2009-11-13 64 views
25

全部,JQuery UI选项卡 - “正在加载...”消息

我正在使用Jquery UI嵌套选项卡。我只是想知道是否有任何方式显示一个AJAX微调图像旁边的标签文本,而标签加载。我不想将标签文本更改为“加载..”。考虑到当多个选项卡同时加载或一个接一个加载时,微调器图像应显示在每个加载选项卡旁边。

任何建议?

谢谢

回答

5

巴鲁,我最近需要类似的东西。在我的项目中,我希望标签保留标签标题,但附加一个ajax加载类型的动画。这里是我使用的:

$(".tabs").tabs({ spinner: '', 
       select: function(event, ui) { 
        $(".tabs li a .loader").remove(); 
        $(".tabs li a").eq(ui.index).append("<span class='loader'><img src='images/ajax-loader.gif'/></span>"); 
        }, 
       load: function(event, ui) { $(".tabs li a").eq(ui.index).find(".loader").remove(); } 
       }); 

“微调”选项删除“加载...”效果点击标签。 “选择”事件允许我们获取选定的选项卡并追加一个包含动画的新跨度。内容加载完成后,我们使用“加载”事件删除动画。为了防止多个用户点击销毁标签,我们删除()所有选项卡上的动画。

你已经解决了这个问题吗?如果是这样,请分享解决方案。

+0

你好....它没有工作对我来说,虽然乌尔逻辑是合理的..可能出现问题与选择.. ..下面的溶胶工作..感谢分享 – bsr 2010-06-17 14:57:58

8

我自己对此使用了不同的方法。我希望标签标题保持原样,并在标签本身中加载“加载”信息。

我做了如下的方式:

$("#matchTabs").tabs({ 
     spinner: "", 
     select: function(event, ui) { 
     var tabID = "#ui-tabs-" + (ui.index + 1); 
     $(tabID).html("<b>Fetching Data.... Please wait....</b>"); 
     } 
    }); 

像以前的海报,我用离心方法,以防止标签的标题被改变。 select事件在选择新选项卡时触发,因此我得到了当前选定选项卡的ID并添加了一个以创建一个变量,该变量将引用缺省情况下加载ajax内容的DIV。

一旦你有了ID,你所需要做的就是用你的加载信息替换DIV中的HTML。当Ajax完成时,它会用实际内容替换它。

39

如果你使用标签缓存,那么这个解决方案可能更适合,如果内容不在页面上,它只显示ajax加载。

$(".tabs").tabs({ 
    cache:true, 
    load: function (e, ui) { 
    $(ui.panel).find(".tab-loading").remove(); 
    }, 
    select: function (e, ui) { 
    var $panel = $(ui.panel); 

    if ($panel.is(":empty")) { 
     $panel.append("<div class='tab-loading'>Loading...</div>") 
    } 
    } 
}) 
+0

这是一个非常有用的职位,谢谢。我觉得奇怪的是,jQ UI 1.8修剪了函数内部的任何HTML内容,但我只是真的需要一条消息。 – Echilon 2011-09-27 14:35:14

+1

这很酷,但不知何故它不适用于自动选择的第一个选项卡。我通过手动插入div来处理它,并且您的代码会将其删除。 – m1k3y3 2011-11-12 10:23:38

+1

更新版本的jQ UI(因为现在我使用1.11)没有'select'事件。改用'beforeLoad'。这也回答了@ m1k3y3面对的内容(在第一个标签上不起作用),因为在新版本中AFAIK'select'等于'activate'并且第一个标签会自动激活 – blackbiron 2016-04-02 06:59:36

2

在jQuery UI的V1.12可以使用beforeLoad处理程序:

$('#tabs').tabs({     
beforeLoad: function(event, ui) { 
    ui.panel.html('Loading') 
} 
});