2014-05-06 170 views
0

近一个页面,吸引了一个数据驱动的网格,网格包有此代码底部...的getElementById()返回null现有对象

<script type="text/javascript"> 
    (function(window, document, undefined) { 
     "use strict"; 
     var gridColSortTypes = 
      ["string", "string", "number", "number", "number", "number", "number", "number", "number", "number"], 
      gridColAlign = []; 
     var onColumnSort = function(newIndexOrder, columnIndex, lastColumnIndex) { 
     var doc = document; 
     var offset = (this.options.allowSelections && this.options.showSelectionColumn)?1:0; 
     if(columnIndex !== lastColumnIndex) { 
      if(lastColumnIndex > -1) { 
      doc.getElementById("stockHdr" + (lastColumnIndex-offset)).parentNode.style.backgroundColor = ""; 
      } 
      doc.getElementById("stockHdr" + (columnIndex-offset)).parentNode.style.backgroundColor = "#f7f7f7"; 
     } 
     }; 
     ... 
})(this, this.document); 

调查为什么指定排序列颜色更改失败发现,虽然getElementById()查询的对象存在且正在页面中运行,但在此函数内部,这些getElementById()调用返回Null。事实上,由该函数调用的所有getElementById()调用都返回Null。

为什么?

+0

确定的DOM元素并且可触及在这段代码执行的时候?尝试在window.onload中包装你的函数。另外(无关和迂腐),为什么不只是调用你的外部闭包参数'doc'而不是创建另一个var? –

回答

1

我要去假设DOM内容还没有准备好/访问,当您试图访问它,尝试包装你的代码window.onload

window.onload = function(){ 
    (function(window, doc, undefined) { 
     "use strict"; 
     var gridColSortTypes = 
      ["string", "string", "number", "number", "number", "number", "number", "number", "number", "number"], 
      gridColAlign = []; 
     var onColumnSort = function(newIndexOrder, columnIndex, lastColumnIndex) { 
     var offset = (this.options.allowSelections && this.options.showSelectionColumn)?1:0; 
     if(columnIndex !== lastColumnIndex) { 
      if(lastColumnIndex > -1) { 
      doc.getElementById("stockHdr" + (lastColumnIndex-offset)).parentNode.style.backgroundColor = ""; 
      } 
      doc.getElementById("stockHdr" + (columnIndex-offset)).parentNode.style.backgroundColor = "#f7f7f7"; 
     } 
     }; 
     ... 
    })(this, this.document); 
};