IE9 Compatibility Mode Error: Unable to get value of the property '0': object is null or undefined

IE9 Compatibility Mode Error: Unable to get value of the property '0': object is null or undefined

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

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);
  }
}

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

当feeTable为空值时可能出现此错误

var feeTable = document.getElementById("feeTable");

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

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

row.cells[8].onclick = gatherRowData;

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