无法获得房产' 0'未定义或空引用JavaScript Internet Explorer

时间:2017-08-15 04:50:30

标签: javascript jquery

JavaScript代码     

function update() {

    var newAmt = 0;
    var newtable = document.getElementById("tbl");

    for ( var i = 0; i < newtable.rows.length; i++) {
        innerTable = newtable.rows[i].cells[0].childNodes[0];

         if ( (innerTable.rows[0].cells[5].childNodes[0].value != "")
                && !(isNotNumber(innerTable.rows[0].cells[5].childNodes[0].value))) {
            newAmt = newAmt + parseFloat(innerTable.rows[0].cells[5].childNodes[0].value);
        } 
    } 
</script>

innerTable.rows [0]抛出异常无法获取属性&#39; 0&#39; Internet Explorer中的未定义或空引用

但是同样的代码在eclipse网络浏览器中完美运行

HTML

<table id="tbl">
 <logic:iterate name="editList" property="list" id="editForm">
    <tr>
        <td>
            <table>
                <tr>
                    <td></td>
                    <td /></td>
                    <td></td>
                    <td /></td>
                    <td></td>
                    <td><html:text  name="Amt" onchange="update()" /></td>
                </tr>
                <tr>
                </tr>
                <tr>
                </tr>
             </table>
         </td>
       </tr>
 </logic:iterate>
</table>

过去两天被困在这一个。完全厌倦了一些人帮助我

先谢谢

2 个答案:

答案 0 :(得分:0)

生成此异常是因为innerTable.rows的值为null或未定义。并且您正在尝试获取未定义或空值的第0个索引。在获取innerTable.rows的值之前,先进行null / undefined检查。

要验证,您可以在控制台中记录innerTable.rows的值。

答案 1 :(得分:0)

尝试使用这个更简单,不引人注目的代码 注意我删除了内联事件处理程序

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}
var fields, newAmt = 0;
// unobtrusive version ignoring table
window.onload = function() {
  fields = document.querySelectorAll("[name=Amt]");
  for (var i = 0; i < fields.length; i++) {
    fields[i].onkeyup = function() {
      newAmt = 0;
      for (var i = 0; i < fields.length; i++) {
        var val = fields[i].value;
        newAmt += val != "" && isNumber(val) ? parseFloat(val) : 0;
      }
      console.log(newAmt);
    }
  }
};

// fixing your code - not using nodes will help IE too:

function update() {
  var newAmt = 0;
  var newtable = document.getElementById("tbl");
  for (var i = 0; i < newtable.rows.length; i++) {
    var innerTable = newtable.rows[i].cells[0].getElementsByTagName('table')[0],
      input = innerTable.rows[0].cells[5].getElementsByTagName('input'),
      val = input && input.length ? input[0].value : 0;

    if (val!="" && isNumber(val)) {
      newAmt += parseFloat(val);
    }
  }
  console.log(newAmt);
}  
Just start typing numbers

<table id="tbl">
  <tr>
    <td>
      <table>
        <tr>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td><input type="text" name="Amt" /></td>
        </tr>
        <tr>
          <td></td>
        </tr>
        <tr>
          <td></td>
        </tr>
      </table>
    </td>
  </tr>
  <tr>
    <td>
      <table>
        <tr>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td><input type="text" name="Amt" /></td>
        </tr>
        <tr>
          <td></td>
        </tr>
        <tr>
          <td></td>
        </tr>
      </table>
    </td>
  </tr>
  <tr>
    <td>
      <table>
        <tr>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td><input type="text" name="Amt" /></td>
        </tr>
        <tr>
          <td></td>
        </tr>
        <tr>
          <td></td>
        </tr>
      </table>
    </td>
  </tr>
  <tr>
    <td>
      <table>
        <tr>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td><input type="text" name="Amt" /></td>
        </tr>
        <tr>
          <td></td>
        </tr>
        <tr>
          <td></td>
        </tr>
      </table>
    </td>
  </tr>
</table>

<hr>
<button type="button" onclick="update()">Test your fixed code</button>