IE9兼容模式错误:无法获取属性的值' 0':对象为null或未定义

时间:2015-06-23 18:20:22

标签: javascript internet-explorer ie-compatibility-mode

我正在尝试在表格中获取<tr>元素的子元素。我需要获取每个<td>个单元格。我不能使用jQuery,只能出于基础设施的原因使用JavaScript。我的JavaScript看起来像这样:

&#13;
&#13;
var feeTable = document.getElementById("feeTable");

function gatherRowData() {
  console.log("gathering row data");
  var rows = this.parentNode.children; //This is where it fails.
  var state = rows[0].innerText;
  var county = rows[1].innerText;
  var city = rows[2].innerText;
  console.log("state: " + state);
  document.getElementById("state_code").value = state;
  document.getElementById("county_name").value = county;
  document.getElementById("city_name").value = city;
}

//Loop through Vehicle Fee Changes to find any empty cells in county, city, or start date.
for (var i = 0; row = feeTable.rows[i]; i++) {
  var county = row.cells[1];
  var city = row.cells[2];
  var startDate = row.cells[6];

  if (county.innerText == "") {
    county.style.backgroundColor = "#FF0000";
    showError(invalidCells);
  }
  if (city.innerText == "") {
    city.style.backgroundColor = "#FF0000";
    showError(invalidCells);
  }
  if (startDate.innerText == "") {
    startDate.style.backgroundColor = "#FF0000";
    showError(invalidCells);
  }

  if (document.addEventListener) {
    row.cells[8].addEventListener("click", gatherRowData);
  } else if (document.attachEvent) { //Support for IE
    row.cells[8].attachEvent("onclick", gatherRowData);
  }
}
&#13;
&#13;
&#13;

onClick侦听器工作正常,但是当我尝试获取表行的子代时,它会给我错误:Error message: Unable to get value of the property '0': object is null or undefined它在所有其他浏览器中都能正常工作,并且没有兼容模式的IE9(它需要在兼容模式下运行)。我错过了什么才能让我得到tr元素的孩子?

2 个答案:

答案 0 :(得分:0)

当feeTable具有空值

时,可能会发生此错误
var feeTable = document.getElementById("feeTable");

尝试在控制台中写入feeTable的值,并检查它是否具有除null之外的正确值。

答案 1 :(得分:0)

我找到了解决问题的方法。事实证明,当您使用attachEvent附加事件侦听器时,JavaScript事件处理函数中对this的引用实际上并未引用正在单击的对象。它代表整个Window对象。我不得不使用稍微不那么优雅的解决方案:

row.cells[8].onclick = gatherRowData;

这是唯一适用于不支持addEventListener的IE版本的解决方案。使用此解决方案,我的其余代码工作正常,this引用了<td>元素。