javascript给html的表格添加行,并且每行添加一个onclick事件。要求点击不同行要传递当前行号给某函数

代码如下:for(i=1;i<=20;i++){Tr=Tab_Main.insertRow();Td=Tr.insertCell();Td.onclick=functio... 代码如下:
for (i=1;i<=20;i++) {
Tr=Tab_Main.insertRow();
Td=Tr.insertCell();
Td.onclick=function() {
alert(i);
}
}
现在问题是点击每一行弹出的都是21
展开
 我来答
雨月蓝
2012-03-13 · TA获得超过765个赞
知道小有建树答主
回答量:194
采纳率:100%
帮助的人:251万
展开全部
<html>
<head>
<title>添加行</title>
<script type="text/javascript">
function addRow() {
var tb = document.getElementById("tb");
var length = tb.rows.length;//该表格的总行数
var row = tb.insertRow(length);//在行末尾添加一行
row.ondblclick = function () { altRowNum1(row); } //为行添加双击事件
var c1 = row.insertCell(0);//添加单元格
c1.innerHTML = length + 1;
var c2 = row.insertCell(1);
c2.innerHTML = '<input type="text" />';
var c3 = row.insertCell(2);
c3.innerHTML = '<input type="button" onclick="altRowNum2(this)" value="当前行"/>';
}
function altRowNum1(row) {
var rowIndex = row.rowIndex;//行号
alert("行双击,这是第 " + (rowIndex + 1) + " 行,行下标为 " + rowIndex);
}
function altRowNum2(btn) {
var rowIndex = btn.parentNode.parentNode.rowIndex; //btn的父节点为单元格,单元格的父节点当前行
alert("单元格按钮单击,这是第 " + (rowIndex + 1) + " 行,行下标为 " + rowIndex);
}
</script>
</head>
<body>
<input type="button" value="添加" onclick="addRow()"/><br/>
<table id="tb" width="200px" border="1px" >
<tr ondblclick="altRowNum1(this)"><td>1</td><td><input type="text" value="60"/></td><td><input type="button" onclick="altRowNum2(this)" value="当前行"/></td></tr>
<tr ondblclick="altRowNum1(this)"><td>2</td><td><input type="text" value="67"/></td><td><input type="button" onclick="altRowNum2(this)" value="当前行"/></td></tr>
<tr ondblclick="altRowNum1(this)"><td>3</td><td><input type="text" value="59"/></td><td><input type="button" onclick="altRowNum2(this)" value="当前行"/></td></tr>
<tr ondblclick="altRowNum1(this)"><td>4</td><td><input type="text" value="70"/></td><td><input type="button" onclick="altRowNum2(this)" value="当前行"/></td></tr>
<tr ondblclick="altRowNum1(this)"><td>5</td><td><input type="text" value="80"/></td><td><input type="button" onclick="altRowNum2(this)" value="当前行"/></td></tr>
<tr ondblclick="altRowNum1(this)"><td>6</td><td><input type="text" value="90"/></td><td><input type="button" onclick="altRowNum2(this)" value="当前行"/></td></tr>
<tr ondblclick="altRowNum1(this)"><td>7</td><td><input type="text" value="hh"/></td><td><input type="button" onclick="altRowNum2(this)" value="当前行"/></td></tr>
<tr ondblclick="altRowNum1(this)"><td>8</td><td><input type="text" value="98"/></td><td><input type="button" onclick="altRowNum2(this)" value="当前行"/></td></tr>
<tr ondblclick="altRowNum1(this)"><td>9</td><td><input type="text" value="99"/></td><td><input type="button" onclick="altRowNum2(this)" value="当前行"/></td></tr>
<tr ondblclick="altRowNum1(this)"><td>10</td><td><input type="text" value="100"/></td><td><input type="button" onclick="altRowNum2(this)" value="当前行"/></td></tr>
</table>

<div id="resultDiv">
</div>
</body>
</html>
apolloge
推荐于2016-04-05 · TA获得超过653个赞
知道小有建树答主
回答量:559
采纳率:0%
帮助的人:434万
展开全部
你的i是全局的变量,当页面渲染完成以后,i = 21 ,在执行alert(i) 肯定会输出 21
最好是给Td加上ID ,然后在onclick是打印该行的ID就好了,不要用 i 。

例如:
for (var i = 1; i <= 20; i++) {
Tr = Tab_Main.insertRow();
Td = Tr.insertCell();
Td.id = i;
Td.onclick = function (Td) {
alert(Td.id);
}
}
追问
Td.id = i;
Td.onclick = function (Td) {
alert(Td.id);

点击时弹出未定义,undefined
追答
不好意思,写错了,下面的没问题了

for (var i = 1; i

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
缓步莫迟疑C
2012-03-13 · TA获得超过1.1万个赞
知道大有可为答主
回答量:6217
采纳率:73%
帮助的人:6453万
展开全部

alert(i);
改成
alert(this.cellIndex);

因为你的变量 i 只有一个,那么值也就只有一个, 当循环完成以后 i 的值就是21, 所以当你这时再取 i 的值,都是21.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
goshimo
2012-03-13 · TA获得超过524个赞
知道小有建树答主
回答量:883
采纳率:0%
帮助的人:448万
展开全部
用闭包多好啊,JS的高级应用:
for (i=1;i<=20;i++) {
(function(_i) {
Tr=Tab_Main.insertRow();
Td=Tr.insertCell();
Td.onclick=function() {
alert(_i);
}
})(i);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式