2016-04-11 23 views
0

所以我想完成的是當網格完全加載時,我遍歷包含複選框的某個列。根據複選框的值,我應該能夠禁用它。 問題是我無法訪問那裏的html元素。我做錯了什麼或忽略了什麼? 我已經試過:驗證是否某些屬性(例如位置)都需要進行改變:從loadComplete中的網格訪問html元素

loadComplete: function() { 
    // Fetch all the ID's of the rows 
    var rows = $("#table").getDataIDs(); 
    // Loop over the rows 
    if(rows.length != 0){ 
     for(i=0; i < rows.length; i++) { 
      // Get the data so we test on a certain condition 
      var row = $("#table").jqGrid("getRowData", rows[i]); 
      if (row.gridCheckbox == 1) { 
       //disable the element 
       row.prop("disabled", "disabled"); 
      } 
     } 
    } 
} 

回答

1

明白,改變在大多數情況下,以網頁瀏覽器reflow頁面後續一個元素是很重要的頁面上的所有其他元素。如果你在循環中做了改變,那麼你的JavaScript代碼可能會非常慢。

因此,嚴格建議減少DOM的更改次數。尤其是要減少jqGrid提供的rowattr,cellattr和自定義格式化程序的更改次數。如果您需要例如在某些行上設置disabled屬性,那麼現在應該loadComplete中執行此操作,而是使用rowattr來通知jqGrid應該在某些行上設置一些其他屬性(disabled="disabled")。 jqGrid首先收集整個表體的字符串表示,並使用一個指定innerHTML在一個DOM操作中填充整個網格。它本質上提高了性能。請參閱the old answer中的代碼示例。

+0

你先生,是一個jq神,thx! – Nimrod

+0

@Nimrod:不客氣!我很高興能幫助你。 – Oleg