2010-11-02 49 views
2

我有使用JqGrid中的filterGrid選項生成的搜索表單。我想添加一個在提交搜索表單前調用的JavaScript邏輯。我已經添加了一個由filterGrid的beforeSubmit屬性調用的方法。它在提交之前進入該方法,但始終提交表單,而不管返回的值如何。如果javascript返回false,我希望表單不要提交。在提交使用JQGrid中的filterGrid生成的搜索表單之前驗證

有沒有你們之前實施過這樣的事情。或者還有其他更好的方式來實現這一點。任何對此的幫助將非常感激。

代碼:

$("#search").filterGrid("#resultsGrid", 
         {gridModel:true,gridNames:true,enableSearch:true, 
         formtype:"vertical",buttonclass:"submitButton", 
         enableClear:true,beforeSearch:validateDate}); 

function validateDate(dateDiff) { 
    if(daysDiff < 0){ 
     return [false,"Message"]; 
    } 
    } // ??? (commented by Oleg) 
    return [true,""]; 
} 

回答

2

至少有三種不同的方式搜索如何使用:Toolbar SearchingCustom Searching您使用和Single field searchingAdvanced Searching共享相同的代碼。所以目前有三種不同的關係。

只有Toolbar SearchingbeforeSearch事件處理程序可以返回false停止搜索。在Custom Searching的情況下,事件處理程序beforeSearch返回的值將不會使用Single field searchingAdvanced Searching在搜索之前不會調用任何事件處理函數。在所有情況下,搜索將設置搜索過濾器和jqGrid的參數searchtrue,然後強制電網與代碼重裝像

$("#gridId").trigger("reloadGrid",[{page:1}]); 

爲了能夠使任何驗證,並停止網格我看不出有什麼簡單的重裝辦法。所以我建議只跟隨。

您可以覆蓋標準的reloadGrid事件處理程序和它。對應的代碼CON樣子如下:

var grid = $("#gridId"); 
var events = grid.data("events"); // read all events bound to 
var originalReloadGrid; // here we will save the original event handle 
var skipRefresh = false; // this can be changed by owe validation function 
// Verify that one reloadGrid event hanler is set. It is typical sitation 
if (events && events.reloadGrid && events.reloadGrid.length === 1) { 
    originalReloadGrid = events.reloadGrid[0].handler; // save old 
    grid.unbind('reloadGrid'); 
    var newEvents = grid.data("events"); 
    grid.bind('reloadGrid', function(e,opts) { 
     if (!skipRefresh && grid[0].p.search) { 
      originalReloadGrid(e,opts); 
     } 
    }); 
} 

也許我以後要創建哪些證明這一點上的示例演示並把鏈接到這裏演示。此外,我會嘗試建議將代碼更改爲jqGrid,以便在搜索的所有不同實現中都可以通過返回false通過beforeSearch事件句柄來停止serching。

已更新:好的!我爲你準備了demo。在演示中,我沒有使用服務器組件,所以它不會真的搜索,但是如果網格將被刷新並進入第1頁,則可以看到結果。

要測試demo,您可以執行以下操作:

  1. 在「客戶」輸入字段中鍵入不以「test」開頭並單擊「搜索」按鈕的文本。您會收到一個模擬驗證對話框的警報。
  2. 在「客戶端」輸入字段中鍵入一個文本,以'test'開頭,如test1,然後單擊「搜索」按鈕。現在grig會刷新,因爲驗證是確定的。
+0

非常感謝您的幫助。你有沒有我可以參考的例子。 – Sam 2010-11-03 19:59:35

+0

奧列格,真棒,工作。非常感謝 – Sam 2010-11-04 00:15:58

+0

的幫助,感謝您找到創建此演示的時間。感謝你的幫助。非常感謝 – Sam 2010-11-04 00:17:22