jqGrid предотвращает навигацию по пейджеру?

Мы используем специальный форматтер для вывода текстовых полей HTML-формы. В случае, если пользователь ввел данные и нажал кнопку «Далее/предыдущий», мы хотим сказать им: «Вы отредактировали данные, нажмите «ОК», чтобы остаться на этой странице и сохранить свои данные». Как вы можете это сделать?

Событие 'onPaging срабатывает при использовании пейджера, но похоже, не позволяет предотвратить разбиение на страницы.


Обновление: текущий обходной путь:

var currPg = 1;
var dirty = 'false';


  $("#list").jqGrid({
    ...
    onPaging: function (b) {
        var nextPg = $("#list").getGridParam("page");

        if (dirty == 'false') {
           currPg = nextPg;
           return;
        }


        $( "#dialog-confirm" ).dialog({
        modal: true,
        buttons: {
            "Stay on current page": function() {
                $( this ).dialog( "close" );
            },
            "Change page": function() {
                $( this ).dialog( "close" );
                reloadGrid($("#list"), null, nextPg, 'false');
            }
        }
        });

        $("#list").setGridParam({page:currPg}); //Workaround - jqGrid still increments the page num even when we return stop so we have to reset it (and track the current page num)    
        return 'stop';
    },

Обновление 2: зарегистрирована ошибка здесь.


person Marcus Leon    schedule 27.09.2010    source источник


Ответы (2)


Если функция onPaging возвращает 'stop', то нумерация страниц будет остановлен.

person Oleg    schedule 27.09.2010
comment
Спасибо Олег, сейчас работаю над этим. Я думаю, что обнаружил одну ошибку: если вы вернете «стоп», номер страницы сетки по-прежнему будет увеличиваться... будет отправлена ​​ошибка... - person Marcus Leon; 27.09.2010
comment
@Marcus: в качестве обходного пути вы можете сбросить значение с помощью setGridParam - person Oleg; 27.09.2010
comment
Только что сделал это :) Есть ли способ определить текущую отображаемую страницу? Если вы используете getGridParam('page'), он возвращает страницу, которая будет отображаться следующей. Я использовал новую переменную для отслеживания фактического отображаемого номера страницы - не уверен, что есть лучший способ. - person Marcus Leon; 27.09.2010
comment
@Marcus: Вы можете получить это напрямую с помощью jQuery. - person Oleg; 27.09.2010
comment
Я не понимаю, о чем вы говорите - как вы можете запросить jqGrid, чтобы отобразить текущую страницу? Если вы используете getGridParam('page') в onPaging, это вернет вам номер следующей/предыдущей/первой/последней страницы, а не номер текущей страницы. - person Marcus Leon; 27.09.2010
comment
@Marcus: вы можете использовать $('input.ui-pg-input',$('#pager')[0]).val() для получения и $('input.ui-pg-input',$('#pager')[0]).val(str) для установки и str на пейджер. - person Oleg; 27.09.2010
comment
Есть один случай, когда кажется, что это не работает - если вы введете в текстовое поле пейджера номер страницы, на которую хотите перейти, и нажмете ввод - указанный вами код вернет следующую страницу, а не текущую страницу. - person Marcus Leon; 28.09.2010
comment
@Маркус: я не могу воспроизвести твою проблему. Посмотрите на ok-soft-gmbh.com/jqGrid/Pager.htm демо. Вы можете ввести что-нибудь в пейджер и нажать кнопку «получить». Вы увидите текст с пейджера в окне предупреждающего сообщения. Вы также можете ввести что-нибудь в поле ввода и нажать кнопку «Установить». Все работает так, как я себе это представляю. Я не вижу проблемы. - person Oleg; 28.09.2010
comment
Если я нахожусь на странице 10, набираю 20 и нажимаю Enter на пейджере, в функции onPaging я хочу определить, что мы (в настоящее время) на странице 10, но $('input.ui-pg-input',$('#pager')[0]).val() вернет 20, а не 10. Ваш пример немного отличается от моего варианта использования (вы не используете onPaging). Есть смысл? Спасибо за помощь Олег.. - person Marcus Leon; 28.09.2010
comment
@Marcus: обходной путь очень прост: посмотрите на новую версию ok-soft-gmbh. .com/jqGrid/Pager.htm и повторите эксперимент. А вот небольшой баг в jqGrid я обнаружил: строки 1740 и 1741 из grid.base.js нужно поменять местами. В настоящее время можно изменить значение параметра pager перед вызовом обработчика события onPaging. - person Oleg; 28.09.2010
comment
Спасибо Олег. Я делал что-то подобное - я разместил свою текущую реализацию/обходной путь в посте - что вы думаете? - person Marcus Leon; 28.09.2010
comment
@Marcus: У вашей реализации есть одна проблема: первая инициализация currPg. Вы устанавливаете его в 1, что на 99,9% правильно, но используете непонятную строку dirty (которая может быть логической). Я установил velus в gridComplete, который будет вызываться после установки первого значения пейджера. Тем не менее, ваш обходной путь также будет работать. Вы должны удалить только переменную dirty и просто использовать currPg=1 - person Oleg; 28.09.2010

По моему наблюдению, событие onPaging хорошо работает в последнем плагине jqgrid. В то время как, если мы используем предыдущий плагин jqgrid (до версии 3.8). Событие onPaging будет работать, но после использования этого события есть ошибка в разбиении на страницы. Поскольку оно автоматически увеличивает значение страницы либо пользователь нажимает «ОК», либо «Отмена» (в обоих случаях). Что приводит к повреждению данных разбивки на страницы.

person Innovation    schedule 29.11.2013