Удалить оператор поиска (И / ИЛИ) в множественном поиске jqGrid - PullRequest
4 голосов
/ 25 мая 2011

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


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

Есть идеи? Спасибо!

Ответы [ 3 ]

5 голосов
/ 25 мая 2011

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

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

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();
        }
    }
);

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

enter image description here

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

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

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

1 голос
/ 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];
            }
        });
1 голос
/ 09 июля 2012

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

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

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