2012-08-10 276 views
1

我有完全一樣的體驗,在the JQGrid forum報道。的jqGrid:剪切和粘貼過濾器工具欄不會觸發過濾

如果我複製和粘貼通過鼠標一些文本搜索字段(即右鍵點擊「粘貼」),搜索不會被觸發。如果我通過鍵盤複製並粘貼(例如Ctrl + C和Ctrl + V),則會觸發搜索。

I.e.它似乎只在按鍵/鍵盤上觸發搜索 - 我怎樣才能配置網格以識別鼠標粘貼事件?

回答

1

你有兩個選擇,你可以試試。

選項1:

您可以設置您的工具欄僅通過選項設置上輸入要搜索:searchOnEnter爲true設置工具欄的時候。這將需要進入到被點擊之前,過濾器會發生,不管它是如何進入

$("#grid_id").jqGrid('filterToolbar',{ searchOnEnter: true }); 

選項2:(更新來修復錯誤)

檢測粘貼事件使用jQuery,然後調用api來觸發工具欄搜索。

var headers = $('.ui-th-column'); 
$.each(headers, function(index, item) { 
    var div = $(this).children('div'); 
    if (div.length > 0) { 
     var input = div.children('input'); 
     if (input.length > 0) { 
      $(input).bind('paste', function(e) { 
        var sgrid = $("#grid_id")[0]; 
        sgrid.triggerToolbar(); 
       }); 
     } 
    } 
}); 

注:它不會出現有觸發使用新的API搜索的方式。

+0

我寧願不使用選項1(searchONEnter:真) – johan 2012-08-10 15:48:05

+0

標記此爲正確的,因爲使用dataInit我的回答如果你使用它攪亂了先進的搜索對話框。請注意,我仍然需要添加setTimeout調用以使其工作 – johan 2012-08-13 07:31:41

1

我想我已經破解了。您可以在「dataEvents」陣列中searchOptions添加一個「貼」事件:

var colModel = [..., 
    searchoptions: { 
     dataEvents: [ 
         { type: 'paste', 
         fn: function(e) { 
          setTimeout(function() { 
          var sgrid = $("#grid_id")[0]; 
          sgrid.triggerToolbar(); 
          }, 1); 
         } 
         } 
        ]} 
]; 

注意setTimeout調用 - 我認爲有必要添加,否則搜索地沒有粘貼值觸發

該解決方案與@fbfcn提出的選項2大致相同,但我更喜歡它,因爲它與API更乾淨。

評論贊賞!

+0

+1更清晰,並且不需要我必須做的所有選擇器。 – 2012-08-10 16:04:52

+0

Argg ....這個解決方案的問題在於,當您將值粘貼到高級搜索搜索表單的文本字段中時,它會觸發工具欄搜索 - 而不是我想要的行爲。 – johan 2012-08-13 07:27:06