删除multiplesearch jqGrid中的搜索运算符(AND / OR)

时间:2011-05-24 20:25:31

标签: javascript asp.net-mvc-2 jqgrid jqgrid-asp.net

我需要在搜索弹出窗口中隐藏操作符,但我无法使其工作。 我试过这个,但两个运营商仍然出现:


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

有什么想法吗? 谢谢!

3 个答案:

答案 0 :(得分:5)

没有可以直接做你需要的选项。此外,如果您在对话框初始化(例如beforeShowSearch事件处理程序内部)中使用$('select.opsel').hide()隐藏搜索对话框中的ADD / OR操作数,则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();
        }
    }
);

您可以在the demo上看到真正有效的方式。

更新:写完答案后,我向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();
        }
    }
);

请参阅修改过的演示here

enter image description here

我在afterRedraw

的代码中又添加了一行
$form.find("input.add-rule,input.delete-rule").button();

仅改善搜索对话框中按钮的外观。我建议在jqGrid中进行默认设置,但trirand不接受这个设置。无论如何,包含jQuery UI的每个人都可以在afterRedraw中添加这样的行以使按钮变平。

答案 1 :(得分:1)

4.4.0接受的答案对我不起作用。

更简单的似乎是挂钩afterRedraw事件并删除opsel select元素:

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

答案 2 :(得分:1)

看到这里!

 //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];
            }
        });