2017-08-15 173 views
-1

JavaScript代碼的 無法獲取屬性 '0' 未定義或空引用的JavaScript的Internet Explorer

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]拋出異常作爲無法獲取的未定義的屬性 '0'或在Internet Explorer

但同一段代碼空引用是Eclipse的Web瀏覽器可以正常使用

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> 

在這一個從過去兩天卡住。完全夠了有人幫我

由於提前

+0

這說明了什麼? 'for(var i = 0; i mplungjan

+0

VAL = innerTable.rows [0] .cells [5] .childNodes [0]。價值; //拋出異常爲**無法獲取屬性'0'的未定義或空引用** – Naveen

+0

請檢查我在IE中更新的代碼 - 填寫一些數字並單擊按鈕 – mplungjan

回答

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>

0

產生這種異常,因爲innerTable.rows的值爲null或未定義。你正試圖獲得未定義或空值的第0個索引。在獲取innerTable.rows的值之前進行null/undefined檢查。

要驗證,您可以在控制檯中記錄innerTable.rows的值。

+0

alert(innerTable.rows.length); - - 這是顯示2. 它並沒有拋出任何異常,當我運行在Eclipse Web瀏覽器,但在IE瀏覽器不工作 – Naveen

相關問題