2012-09-07 97 views
3

使用ie8,jqgrid 4.3.3,jquery 1.7.2或1.5.2,多重搜索似乎錯過了一些搜索參數。 第一次添加一個新的搜索行時,它會出現在請求正文中,但有一個空白值(「」) ,如。jqgrid ie8多重搜索過濾器不採用搜索數據時使用cmTemplate

"filters":"{\"groupOp\":\"AND\",\"rules\":[{\"field\":\"code\",\"op\":\"eq\",\"data\":\"\"}]}", 

後續搜索具有相同的參數發送正確的vlaue。 我的基本設置如下(簡化)

$('#Table').jqGrid({ 
     //.... 
    datatype: 'json', 
    colNames: ['Code'], 
    colModel: [{ 
     name: 'Code', 
     index: 'Code'}], 
    pager: '#Pager' 
}).jqGrid('navGrid', '#Pager', { 
    add: false, 
    edit: false, 
    del: false, 
    refresh: false 
}, {}, {}, {}, { 
    multipleSearch: true 
}).trigger('reloadGrid'); 

更新:添加jsfiddle

很長一段時間後,我發現錯誤只有當我使用cmTemplate指定searchoptions SOPT當發生我不點擊數據文本框之外的單擊'查找'。 See jsfiddle here(記得要直接輸入搜索值後,點擊查找按鈕)

回答

1

我想,這是一個古老的錯誤與我描述的jqGrid here輸入字段的刷新。您可以嘗試插入以下回撥

afterRedraw: function() { 
    $(this).find(".input-elm").triggerHandler('change', [true]); 
} 

here。您也可以嘗試使用jqGrid 4.4.1而不是4.3.3。版本應該沒有這樣的問題。

已更新:我發現我之前發佈並提交的更改已恢復:請參閱here。我的建議是許多改進的集合:

  1. 搜索對話框中的按鈕樣式用於像jQuery UI和jqGrid的所有其他部分。人們可以使用uiButtons: false來使用舊的風格。
  2. 一個可以改變默認名稱「+」,「 - 」和「+ {}」按鈕,並且全部都是英文只在jqGrid的('Add rule''Delete rule''Add subgroup''Delete group')的當前版本的提示。
  3. 焦點將額外設置爲輸入控件或按鈕。它只允許使用鍵盤搜索對話框而無需使用鼠標。
  4. 在最後一次從搜索對話框中讀取數據之前,將觸發所有輸入控件上的"change"事件。

上次更改對於解決您的問題可能很重要。

應該修改filterData函數的實現。應該添加行

$(this).find(".input-elm").each(function() { 
    $(this).triggerHandler("change"); 
}); 

之前the line

問題是,jqGrid綁定'更改'事件到搜索對話框的所有輸入字段(請參閱the lines)。在用戶鍵入搜索數據後,將觸發「更改」事件,並且內部數據filter(請參閱rule.datafilter的一部分,the line)將被修改。如果用戶點擊搜索按鈕當前filter將被獲得(見the line)。問題是change事件將在處理'click'事件在「搜索」按鈕後在一些網絡瀏覽器處理。所以來自上次搜索過濾器的輸入數據可能尚未設置。 .triggerHandler("change")之前的所有輸入控件的調用將返回filter的數據可以解決問題。在這種情況下,可以調用一些不需要的事件,但可以確保filter中的數據與來自數據庫的數據相同。

我認爲reverting of the changes是個壞主意。

如果一個人會用searchOnEnter: true選項.triggerHandler("change")的使用情況,並開始與搜索輸入關鍵問題不應該發生,因爲the line

$("#"+fid+"_search").focus().click(); 

,其中重點將明確設置爲「搜索」按鈕處理點擊事件之前。在這種情況下,將間接觸發"change"事件並刷新filter中的數據。

我認爲你可以解決你描述的問題,而不會直接觸發change事件。取而代之的是一個可以包括click事件處理函數內的重點

$("#"+fid+"_search").focus(); 

明確的設置(見the line)。在the line之前這樣做很重要,其中.jqFilter('filterData')將被調用。

+0

這是網格事件嗎? –

+0

@chohi:你應該在你定義'multipleSearch:true'的同一級別包含回調。看看[演示]中的代碼(http://jsfiddle.net/U6BPx/5/)。這是[搜索]的回調(http://www.trirand.com/jqgridwiki/doku.php?id=wiki:singe_searching#options)。 – Oleg

+0

使用最新的網格4.4.1和jquery 1.7.2 - 在我編輯新的過濾器行之前重新觸發之後,無法執行@oleg,儘管如此,記錄input-elm的val()會顯示我的新值,請問我需要一個處理函數來擴展postdata並選擇了過濾器? –