2011-05-24 71 views
4

我需要在搜索彈出窗口中隱藏操作符,但我無法使其運行。 我嘗試這樣做,但無論是運營商還是會出現:刪除多搜索中的搜索運算符(AND/OR)jqGrid


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

任何想法? 謝謝!

回答

5

沒有可以直接做你需要的選項。此外,如果在對話框初始化時(例如在beforeShowSearch事件處理程序中)隱藏搜索對話框中的ADD/OR操作數與$('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(); 
     } 
    } 
); 

您可以在the demo上看到這種方式真正起作用。

UPDATED:寫完答案後,我發佈了一些建議,以改善jqGrid。現在jqGrid有許多功能可以簡化上述工作。例如存在​​可以直接使用的回調。因此,從答案的代碼看起來像

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

我增加了一個行的​​

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

代碼只改善搜索對話框中按鈕的外觀。我建議在jqGrid中默認設置這樣的設置,但這不被三行數據接受。無論如何,每個包含jQuery UI的人都可以在​​中添加這樣的代碼,使按鈕變得平坦。

+0

謝謝,它的工作原理! – Martin 2011-05-25 17:55:13

+0

@Martin:不客氣! – Oleg 2011-05-25 18:12:28

+0

不適用於4.4.3,我猜這不適用於> = 4.4.0 – 2013-01-28 20:44:20

1

接受的答案在4.4.0中不適用於我。

簡單多了似乎是掛鉤afterRedraw事件並刪除OPSEL選擇元素:

jQuery("#grilla")jqGrid(
    "navGrid","#paginador", {del:false,add:false,edit:false},{},{},{}, 
    { 
     multipleSearch:true, 
     afterRedraw: function($p) { 
      $("select.opsel").remove(); 
     } 
    } 
); 
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]; 
      } 
     });