2012-08-28 30 views
0

我創建了一個用於創建jqGrid的可重用函數。JQuery - 可重複使用的jqGrid創建函數觸發使用它的最後一個表的'loadComplete'

function createJqGrid(){ 
    $("#" + gTableId).jqGrid({ 
      datastr: jsonData, 
      datatype: 'jsonstring', 
      jsonReader: { repeatitems: false, root: function(obj) { return obj; }}, 
      headertitles: true, 
      sortable: true, 
      rownumbers: isRowNum, 
      colNames: colHeadNames, 
      colModel: colModel, 
      rowNum: jsonData.length, 
      width: viewableWidth, 
      height: viewableHeight,  
      shrinkToFit: isShrink, 
      scrollOffset: 0, 
      onSelectRow: func, 
      loadComplete: function(data) { 
       alert(gTableId);     
      } 
     }); 
} 

該功能和所有的參數設定被封裝內部MyObject。我的四個jsp有自己獨特的實例MyObject。但是當我觸發一個jqGrid的reloadGrid時,使用這個函數的最後一個表的id被提醒。

考慮:
table1的是內部table1.jsp
表2是內部table2.jsp
表3是內部table3.jsp
表4是內部table4.jsp

$("#table1").trigger("reloadGrid");警報 「表4」
$("#table2").trigger("reloadGrid");警報「table4」
$("#table3").trigger("reloadGrid");警報「table4」
$("#table4").trigger("reloadGrid");警報「table4」


好像最後創建表的loadComplete被觸發。爲什麼這樣?

回答

1

我相信觸發loadComplete是正確的,但問題是多與你的JavaScript的邏輯。您的示例中缺少變量聲明部分,但它看起來像gTableId是一個全局變量。在這種情況下,它每一個電話總是會得到其最後的值(和你的警報一直服用gTableId當前值,它不是凍結以任何方式)。請嘗試修改您的loadComplete這樣來驗證:

loadComplete: function(data) { 
    alert($(this).attr('id'); 
} 
相關問題