javascript循环:变量等于最后一次迭代

时间:2012-12-06 04:26:22

标签: javascript loops iteration

一旦用户点击了addmore链接,下面的代码就会添加元素。

当用户点击删除链接时,问题就会到来。

我的代码上有类似的东西

<script language="JavaScript">
var count=1;
function addmore() {
    alert(count);
    var printme = "<table id='table"+count+"'><tr><td><a href='#' onclick='remove(count)'>remove</a></td></tr></table";
    //(other code here)...
    count++;
}

function remove(y) {
    alert(y)
    var tab = 'table'+y;    
    document.getElementById(tab).style.display =  "none";
}
</script>

我在这里使用了警报,因此我可以轻松监控它给出的计数值。

这里发生的是'y'(在删除函数上)的值总是相同的,这是循环中count的最后一个值。

例如,我点击链接addmore 3次,因此我的'count = 4'的最后一个值。 而且,我想删除第3个元素,当我点击删除链接时,它必须有像这样的传递参数remove(3)。但是这里发生的是我点击它的任何元素似乎总是以这种方式传递参数remove(4)

4 个答案:

答案 0 :(得分:2)

那是因为你有count作为全局变量。

尝试使用.....onclick='remove("+count+")'....来“锁定”该值。

答案 1 :(得分:1)

请试试这个:

var printme = "<table id='table"+count+"'><tr><td><a href='#' onclick='remove("+count+")'>remove</a></td></tr></table";

还尝试以下行删除功能:

document.getElementById(""+tab+"").style.display =  "none";

答案 2 :(得分:1)

也许只是onclick ='remove('+ count +')'

您可以执行类似

的操作
<html>
<head>
<script type="text/javascript">
var count=1;
function addmore() {
    var id = 'table' + count;
    var table = document.createElement('table');
    table.setAttribute('id', id);
    var tr = document.createElement('tr');
    var td = document.createElement('td');
    var a = document.createElement('a');
    a.setAttribute('href', '#');
    a.appendChild(document.createTextNode('remove ' + id));
    a.onclick = function() {
        table.style.display = 'none';
        document.body.removeChild(table);
    };
    td.appendChild(a);
    tr.appendChild(td);
    table.appendChild(tr);
    document.body.appendChild(table);
    count++;
}
</script>
</head>
<body>
<a href="#" onclick="addmore()">Add Table</a>
</body>
</html>

使用像这样定义的表引用和onclick,您不需要id

答案 3 :(得分:1)

之前的所有答案都是正确的,onclick是指调用remove时的当前变量计数。

当您为表生成文本时,您可以使用count的值,然后:

onclick='remove('+count+')...

您可以使用以下内容完全忽略ID并计算:

onclick='remove(this.parentElement.parentElement.parentElement);'...

function remove(elementToRemove){
    elementToRemove.parentElement.removeChild(elementToRemove);
}