【问题标题】:Remove search operator (AND/OR) in multiplesearch jqGrid在multiplesearch jqGrid中删除搜索运算符(AND/OR)
【发布时间】:2011-09-01 06:20:58
【问题描述】:

我需要在搜索弹出窗口中隐藏运算符,但我无法让它工作。 我试过了,但两个运算符仍然出现:


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

有什么想法吗? 谢谢!

【问题讨论】:

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


    【解决方案1】:

    没有可以直接做你需要的选项。此外,如果您使用$('select.opsel').hide() 在对话框初始化时(例如在beforeShowSearch 事件处理程序内部)隐藏搜索对话框中的ADD/OR 操作数,则选择元素将被隐藏仅在开头 .用户单击任何按钮后,对话框包含的内容将被重新绘制,而无需调用任何事件处理程序,并且选择元素将再次可见。

    所以我建议通过覆盖过滤器对话框的方法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

    我在afterRedraw的代码中多加了一行

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

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

    【讨论】:

    • 不适用于 4.4.3,我猜它不适用于 >=4.4.0
    • @PavelKovalev:写完答案后,我向 trirand 提出了一些建议。所以必须更改代码(简化)。请参阅我为您写的答案的“已更新”部分。
    • @Oleg Спасибо。 Поздно увидел!谢谢你,先生!
    • @PavelKovalev:Пожалуйста! Я только что подписал это дополнение。 :-) 不客气!
    【解决方案2】:

    接受的答案不适用于 4.4.0。

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

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

    【讨论】:

      【解决方案3】:

      看这里!

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

      【讨论】:

        猜你喜欢
        • 2021-01-03
        • 2012-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-17
        相关资源
        最近更新 更多