Javascript For-Loop之后什么也没发生

Nothing Happens after Javascript For-Loop

本文关键字:什么 For-Loop 之后 Javascript      更新时间:2023-09-26

我在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()
}

演示:小提琴