jqGrid trigger Загрузка оверлея

Кто-нибудь знает, как вызвать оверлей "Загрузка ..." стандартного jqGrid, который отображается при загрузке сетки? Я знаю, что могу использовать плагин jquery без особых усилий, но я хотел бы иметь возможность поддерживать внешний вид моего приложения в соответствии с тем, что уже используется в jqGrid.

Последнее, что я нашел, это следующее:

jqGrid отображает сообщение о загрузке по умолчанию при обновлении таблица / при пользовательском обновлении

  • n8

person gurun8    schedule 24.04.2010    source источник


Ответы (9)


Если вы ищете что-то вроде DisplayLoadingMessage() function. Его нет в jqGrid. Вы можете установить для параметра loadui jqGrid только значение включить (по умолчанию), отключить или заблокировать. Я лично предпочитаю блок. (см. http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options). Но я думаю, что это не то, что вы хотели.

Единственное, что вы можете сделать, если вам нравится сообщение «Загрузка ...» от jqGrid, - это сделать то же самое. Я объясню здесь, что делает jqGrid для отображения этого сообщения: будут созданы два скрытых div. Если у вас есть сетка с id = list, эти блоки будут выглядеть следующим образом:

<div style="display: none" id="lui_list"
     class="ui-widget-overlay jqgrid-overlay"></div>
<div style="display: none" id="load_list"
     class="loading ui-state-default ui-state-active">Loading...</div>

где текст «Loading ...» или «Lädt ...» (на немецком языке) происходит от $.jgrid.defaults.loadtext. Идентификаторы div будут построены из префикса «lui_» или «load_» и идентификатора сетки («список»). Перед отправкой запроса ajax jqGrid делает видимыми один или два из этих div. Он вызывает функцию jQuery.show() для второго div (id = "load_list"), если для параметра loadui установлено значение enable. Если, однако, для параметра loadui установлено значение block, то оба div (id = "lui_list" и id = "load_list") будут показаны с учетом функции .show(). После завершения запроса ajax .hide() функция jQuery будет вызываться для одного или двух div. Это все.

Вы найдете определение всех классов css в ui.jqgrid.css или jquery-ui-1.8.custom.css.

Теперь у вас достаточно информации, чтобы воспроизвести сообщение jqGrid «Загрузка ...», но на вашем месте я бы еще раз подумал, действительно ли вы хотите это сделать или jQuery blockUI plugin лучше для ваших целей.

person Oleg    schedule 24.04.2010
comment
Спасибо за развернутый ответ! Вау, предоставленная вами ссылка «Параметры» действительно дает мне доступ к изнанке чудовища jqGrid, о котором, к сожалению, я до сих пор совершенно не подозревал. Я обнаружил, что документация jqGrid немного противоречит интуиции и трудна для понимания, но я согреваюсь. Это требует некоторого обучения. Я поиграю с div load_list, чтобы посмотреть, смогу ли я заставить его играть хорошо. Я могу в конечном итоге прибегнуть к jQuery BlockUI, как предписано. Но, по крайней мере, я чувствую, что теперь у меня есть варианты (без каламбура). - person gurun8; 25.04.2010
comment
Мне не потребовалось много времени, чтобы понять, что все, что мне нужно сделать для достижения моей цели, это следующее: $ (# load_list) .show (); $ (# load_list) .css (z-индекс, 1000); и $ (# load_list) .hide (); $ (# load_list) .css (z-индекс, 101); Мне пришлось изменить и восстановить z-index, чтобы отображать div поверх настраиваемого диалогового окна. Просто подумал, что поделюсь. - person gurun8; 25.04.2010

я использую

        $('.loading').show();
        $('.loading').hide();

Он отлично работает без создания каких-либо новых div

person dr0zd    schedule 22.03.2013

Просто показать это:

$("#myGrid").closest(".ui-jqgrid").find('.loading').show();

Затем снова скрыть это

$("#myGrid").closest(".ui-jqgrid").find('.loading').hide();
person Justin Levene    schedule 27.12.2015
comment
Пожалуйста, обратите внимание при публикации в старой ветке, в которой есть несколько других ответов, особенно если один из них принят. Вам нужно объяснить, почему ваш ответ лучше всех существующих. - person APC; 27.12.2015
comment
Спасибо!! этот ответ лучше, чем другие, потому что (1) он очень короткий и (2) он обрабатывает случай двух сеток на одной странице. - person John Henckel; 15.03.2016

Я просто разместил строку ниже в событии onSelectRow сетки JQ, и все сработало.

$ ('. загрузка'). show ();

person R Kumar    schedule 15.04.2013

Переопределяемый стиль - [.ui-jqgrid .loading].

person Joel E    schedule 01.03.2011
comment
Это относится только к загрузке ... в середине сетки, но не к оверлею окна, которое блокирует доступ к сетке во время загрузки. - person Jimbo; 20.09.2013

Вы можете вызвать $ ("# load _"). Show () и .hide (), где - идентификатор вашей сетки.

person Chris Kemp    schedule 10.07.2012

это работает с $ ('div.loading'). show (); Это также полезно даже для других компонентов

$('#editDiv').dialog({
            modal : true,
            width : 'auto',
            height : 'auto',
            buttons : {
                Ok : function() {
                    //Call Action to read wo and 
                     **$('div.loading').show();**

                    var status = call(...)
                    if(status){
                        $.ajax({
                            type : "POST",
                            url : "./test",
                            data : {
                                ...
                            },
                            async : false,
                            success : function(data) {

                                retVal = true;
                            },
                            error : function(xhr, status) {


                                retVal = false;
                            }
                        });
                    }
                    if (retVal == true) {
                        retVal = true;
                        $(this).dialog('close');
                    }
                    **$('div.loading').hide();**
                },
                Cancel : function() {
                    retVal = false;
                    $(this).dialog('close');
                }

            }
        });
person Anand    schedule 11.12.2013

Как упоминал @Oleg, пользовательский интерфейс блока jQuery имеет множество хороших функций при разработке базовых приложений ajax. С его помощью вы можете заблокировать весь пользовательский интерфейс или определенный элемент под названием element Block.

Для jqGrid вы можете поместить свою сетку в div (sampleGrid), а затем заблокировать сетку как:

$.extend($.jgrid.defaults, {
    ajaxGridOptions : {
        beforeSend: function(xhr) {
            $("#sampleGrid").block();
        },
        complete: function(xhr) {
            $("#sampleGrid").unblock();
        },
        error: function(jqXHR, textStatus, errorThrown) {
            $("#sampleGrid").unblock();
        }
    }
});
person Alireza Fattahi    schedule 08.04.2014

Если вы хотите не блокировать и не использовать встроенный вызов ajax для получения данных

datatype = "местный"

вы можете расширить функции jqgrid следующим образом:

$.jgrid.extend({
    // Loading function
    loading: function (show) {
        if (show === undefined) {
            show = true;
        }
        // All elements of the jQuery object
        this.each(function () {
            if (!this.grid) return;
            // Find the main parent container at level 4
            // and display the loading element
            $(this).parents().eq(3).find(".loading").toggle(show);
        });
        return show;
    }
});

а затем простой звонок

$("#myGrid").loading(); 

or

$("#myGrid").loading(true); 

чтобы показать загрузку всех ваших сеток (конечно, изменение идентификатора сетки для каждой сетки) или

$("#myGrid").loading(false); 

чтобы скрыть элемент загрузки, нацеливаясь на конкретную сетку, если у вас есть несколько сеток на одной странице

person dpineda    schedule 25.05.2019