簡體   English   中英

JavaScript循環后什么也沒發生

[英]Nothing Happens after Javascript For-Loop

我在Javascript中有一個for循環,可以完美執行,但是在for循環的結束}執行完之后沒有任何內容,例如alert("before"); addListener()函數!

function deleteRow(rowNum){
    var tablelinks = document.getElementById("table1").rows.length;
    //deletes that row number called
    document.getElementById("table1").deleteRow(rowNum);
    //reorders the row numbers in the delete links to reflect their new position
    for(var i = 0; i < tablelinks; i++) {   
        document.getElementById("table1").rows[i].cells[8].innerHTML = '<a href="#" onclick="deleteRow(' + i + ')">Del</a>';
    }

    //these things below do not work
    alert("before");    
    addListener()
    alert("after");             
    sumrows()
}

因為您在刪除目標行之前正在讀取行長

function deleteRow(rowNum) {
    document.getElementById("table1").deleteRow(rowNum); //deletes that row number called
    var tablelinks = document.getElementById("table1").rows.length;
    for (var i = 0; i < tablelinks; i++) { //reorders the row numbers in the delete links to reflect their new position
        document.getElementById("table1").rows[i].cells[8].innerHTML = '<a href="#" onclick="deleteRow(' + i + ')">Del</a>';
    }
    alert("before");
    addListener()
    alert("after");
    sumrows()
}

演示: 小提琴

假設您有5行,並且要刪除第3行,那么表tablelinks將變為5,但是在下一行中,您將刪除第3行,現在只有4行。 現在,當i在循環中成為4時, document.getElementById("table1").rows[i]語句將返回undefined,因為rows只有4個元素而不是5個。


您可以通過將鏈接引用而不是行號傳遞給delete方法來進一步簡化它,例如

<td><a href="#" onclick="deleteRow(this)">Del</a></td>

然后

function deleteRow(link) {
    document.getElementById("table1").deleteRow(link.parentNode.parentNode.rowIndex); //deletes that row number called
    alert("before");
    addListener()
    alert("after");
    sumrows()
}

演示: 小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM