Удалить оператор поиска (И/ИЛИ) в множественном поиске jqGrid

Мне нужно скрыть оператор во всплывающем окне поиска, но я не могу заставить его работать. Я пробовал это, но оба оператора все еще появляются:


jQuery("#grilla").navGrid("#paginador",
{del:false,add:false,edit:false},{},{},{},{
groupOps: [{ op: "OR", text: "any" }], multipleSearch:true});

Любые идеи? Спасибо!


person Martin    schedule 24.05.2011    source источник


Ответы (3)


Нет варианта, который может напрямую делать то, что вам нужно. Более того, если бы вы скрыли операнд ADD/OR из диалога поиска при инициализации диалога (например, внутри beforeShowSearch обработчик события) с $('select.opsel').hide() элемент select будет скрыт только в начале. После того, как пользователь нажмет любую кнопку, диалоговое окно будет перерисовано без вызова какого-либо обработчика событий, и выбранный элемент снова станет видимым.

Поэтому предлагаю решить проблему с перезаписью метода перерисовать диалогового окна фильтра. Код, который это делает, может выглядеть так

jQuery("#grilla").jqGrid("navGrid","#paginador",
    {del: false, add: false, edit: false}, {}, {}, {},
    {
        multipleSearch: true,
        beforeShowSearch: function($form) {
            var searchDialog = $form[0],
                oldrReDraw = searchDialog.reDraw, // save the original reDraw method
                doWhatWeNeed = function () {
                    // hide the AND/OR operation selection
                    $('select.opsel', searchDialog).hide();

                    setTimeout(function () {
                       // set fucus in the last input field
                       $('input[type="text"]:last', searchDialog).focus();
                    }, 50);
                }
            searchDialog.reDraw = function () {
                oldrReDraw.call(searchDialog);    // call the original reDraw method
                doWhatWeNeed();
            }
            doWhatWeNeed();
        }
    }
);

В демонстрации видно, что этот способ действительно работает.

ОБНОВЛЕНО: после написания ответа я отправил в trirand несколько предложений по улучшению jqGrid. Теперь jqGrid имеет множество функций, которые упрощают вышеописанную работу. Например, существует обратный вызов afterRedraw, который можно использовать напрямую. Таким образом, код из ответа будет выглядеть так

grid.jqGrid("navGrid", "#pager",
    {add: false, edit: false, del: false}, {}, {}, {},
    {
        multipleSearch: true,
        afterRedraw: function (p) {
            var $form = $(this);
            $form.find("select.opsel").hide();
            setTimeout(function () {
               // set fucus in the last input field
               $form.find('input[type="text"]:last').focus();
            }, 50);
            $form.find("input.add-rule,input.delete-rule").button();
        }
    }
);

См. измененную демонстрацию здесь:

введите здесь описание изображения

Я добавил еще одну строчку в код afterRedraw

$form.find("input.add-rule,input.delete-rule").button();

только для улучшения внешнего вида кнопок в диалоговом окне поиска. Я предложил сделать такие настройки по умолчанию в jqGrid, но это не было принято trirand. В любом случае каждый, у кого есть jQuery UI, может добавить такую ​​строчку в afterRedraw, чтобы кнопки стали плоскими.

person Oleg    schedule 24.05.2011
comment
Не работает для 4.4.3 и, я думаю, не работает для ›=4.4.0 - person Pavel Kovalev; 29.01.2013
comment
@PavelKovalev: После написания ответа я отправил триранду несколько предложений. Таким образом, код должен быть изменен (упрощен). См. ОБНОВЛЕННУЮ часть моего ответа, которую я написал для вас. - person Oleg; 29.01.2013
comment
@Олег Спасибо. Поздно увидел! Спасибо, сэр! - person Pavel Kovalev; 29.01.2013
comment
@PavelKovalev: Пожалуйста! Я только что подписал это дополнение. :-) Пожалуйста! - person Oleg; 29.01.2013

Принятый ответ не работал у меня с 4.4.0.

Гораздо проще перехватить событие afterRedraw и удалить элемент выбора opsel:

jQuery("#grilla")jqGrid(
    "navGrid","#paginador", {del:false,add:false,edit:false},{},{},{},
    {
        multipleSearch:true,
        afterRedraw: function($p) { 
            $("select.opsel").remove(); 
        }
    }
);
person Brian Reiter    schedule 09.07.2012

глянь сюда !

 //own add edit del search 
        jQuery("#gridTable3").jqGrid('navGrid', '#gridPager3',
        {
        //options
        },
        {
            // edit options
            height: 250,
            reloadAfterSubmit: false,
            closeAfterEdit: true,
            afterSubmit: function(r, data) {
                var messageString = r.responseText;
                var mesObj = eval('(' + messageString + ')');
                return [mesObj.state, mesObj.message];
            }
        },
        {
            // add options
            height: 250,
            reloadAfterSubmit: false,
            closeAfterAdd: true,
            afterSubmit: function(r, data) {
                var messageString = r.responseText;
                var mesObj = eval('(' + messageString + ')');
                return [mesObj.state, mesObj.message];
            }
        },
         {
             // del options
             reloadAfterSubmit: false,
             closeAfterDel: true,
             afterSubmit: function(r, data) {
                 var messageString = r.responseText;
                 var mesObj = eval('(' + messageString + ')');
                 return [mesObj.state, mesObj.message];
             }
         },
        {
            // search options
            multipleSearch: true,//more search  write there,don't pop
            afterSubmit: function(r, data) {
                var messageString = r.responseText;
                var mesObj = eval('(' + messageString + ')');
                return [mesObj.state, mesObj.message];
            }
        });
person Jeff Gao    schedule 07.08.2012