【问题标题】:display Jquery GIF onload Jquery Tabs显示 Jquery GIF onload Jquery Tabs
【发布时间】:2014-03-12 17:04:29
【问题描述】:

我正在尝试在加载 AJAX 内容时在标签显示的区域内显示微调器 gif。但是,我的 Ajax 调用不会发生在选项卡代码中。它通过如下所示的外部 ajax 调用发生,然后在 ajax 调用的 .done() 方法期间,我将 json 数据放在位于选项卡内的 div 中。

我想在 ajax 调用发生时在选项卡内显示一个微调器。我在网上看了几个教程,但没有什么能满足我的需求。任何帮助表示感谢。

                          $('#tabs').tabs({
                                    selected: 1,
                                    beforeLoad: function(event, ui) {
                                        $('#imageSpinner').show();
                                        /* if ajax call to retrieve tab content failed */
                                        ui.jqXHR.error(function() {
                                           // $('#imageSpinner').hide();
                                            ui.panel.html("An error occured.");
                                        });
                                    },

                                    /* Called when tab is loaded */
                                    load: function(event, ui) {
                                      //  $('#imageSpinner').hide();

                                    }
                                });


<div id="tabs">
                                <ul>
                                    <li><a href="#tabs-1">PL Message Viewer</a>
                                    </li>
                                    <li><a href="#tabs-2">File Message Viewer</a>
                                    </li>
                                </ul>

                                <div id="tabs-1" style="height:535px; overflow-y:scroll; float:left; z-index:1;">
                                    <div style="margin-left:32px;">
                                        <div id="buttonContent" class="buttonContente">
                                         <img id="imageSpinner" src="images/image_623941.gif" style="vertical-align:middle; z-index:200;'">
                                        </div>
                                    </div>
                                </div>

                                <div id="tabs-2" style="height:535px; overflow-y:scroll; float:left;">
                                    <div style="margin-left:32px;">
                                        <div id="buttonContentFile" class="buttonContente"></div>
                                    </div>
                                </div>

                            </div>




function getFilters() {
                    return $.ajax({
                        type: "GET",
                        url: "InsertMessage",
                        data: "term=PLM",
                        cache: false,
                        success: function (data) {},
                        error: function (xhr, status, error) {
                            alert(xhr.responseText);
                        }
                    });
                }
                getFilters().done(function (r) {
                    if (r) {
                        gridValsstr = r;
                        gridvals = JSON.parse(gridValsstr);
                        $.each(gridvals.messagetypes, function (key, value) {
                            $("#buttonContent").append('<div id="ck-button"> <label> <input type="checkbox" value="' + value.id + '"><span>' + value.messagetype + '</span>  </label></div>');
                        });

                    }
                })
                    .fail(function (x) {
                        alert("Asynchronous call failed.");
                    });

【问题讨论】:

  • 页面加载时微调器不是已经显示了吗?
  • 那是另一件事我不能告诉 bc 我有一个本地数据库,如果它显示它发生得太快了。

标签: jquery jquery-ui animated-gif jquery-tabs


【解决方案1】:

页面加载时,图像似乎默认显示。 要删除图像并显示内容,请在 done 函数中使用 html() 而不是 append()。

这将用加载的内容替换图像。

$("#buttonContent").html('<div id="ck-button"> <label> <input type="checkbox" value="' + value.id + '"><span>' + value.messagetype + '</span>  </label></div>');

由于您似乎知道要加载 ajax 调用结果的元素,因此您可以在调用 getFilters() 函数时将内容设置为微调器

function getFilters()
{
    $("#buttonContent").html('<img id="imageSpinner" src="images/image_623941.gif" style="vertical-align:middle; z-index:200;'">';
    // your ajax call
});

【讨论】:

  • 是的,这是可行的,然后将其隐藏在 .done() 方法中。
【解决方案2】:

尝试更改 beforeLoad 函数以包含一个函数来处理 ajax 调用的完成事件...

beforeLoad: function(event, ui) {
    $('#imageSpinner').show();

    // when ajax call to retrieve tab content is complete
    ui.jqXHT.done(function() {
        $('#imageSpinner').hide();
    });

    // if ajax call to retrieve tab content failed
    ui.jqXHR.error(function() {
        ui.panel.html("An error occured.");
    });
},

【讨论】:

  • 是的,这行不通,因为我有多个 Ajax 调用...针对页面的不同区域
  • 我对答案进行了更改。试试看,让我们知道你的进展情况。
  • 感谢 Archer,我刚刚发现在 ajax 调用开始时显示 gif,然后在 ajax 调用的 .done() 部分期间在包含图像的 div 中调用 .hide() 是实现它的最简单方法。
  • 是的 - 这就是我建议它的原因 :) 很高兴你得到它的工作,无论哪种方式。
【解决方案3】:
// Tabs
$("#tabs").tabs({
// This enables caching as well
beforeLoad: function( event, ui ) {
    if (ui.tab.data("loaded")) {
        event.preventDefault();
        return;
    }
    ui.jqXHR.success(function() {
        ui.tab.data("loaded", true);
        $(".spinner").hide();
    }),
    ui.jqXHR.error(function( jqXHR, textStatus, errorThrown ) { 
        alert(lang.tabErrorMsg);
    })
},
beforeActivate: function( event, ui ) {
    if (ui.newPanel.html()=="") ui.newPanel.html('<img class="spinner" src="spinner.gif">);
        }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 2014-04-10
    相关资源
    最近更新 更多