如果我把FOR循环注释,使用其下面的四行就可以,为什么?<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>事件监听</title>
</head>
<body>
<table width="60%" border="0" cellpadding="0" cellspacing="1" align="center" bgcolor="#666666" id="table_1">
<tr bgcolor="#ffffff">
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
</table>
</body>
</html>
<script language="javascript">
function addEventHandler(target, type, func)
{
if (target.addEventListener)
{
target.addEventListener(type, func, false);
}
else if (target.attachEvent)
{
target.attachEvent("on" + type, func);
}
else
{
target["on" + type] = func;
}
}function Alert(v)
{
alert(v);
}var table = document.getElementById("table_1");
var td = table.getElementsByTagName("td");
for (var i = 0; i < td.length; i ++)
{
//alert(td.item(i).innerHTML);
addEventHandler(td.item(i), "click", function(){alert(i);})
}
//addEventHandler(td.item(0), "click", function(){alert(0);})
//addEventHandler(td.item(1), "click", function(){alert(1);})
//addEventHandler(td.item(2), "click", function(){alert(2);})
//addEventHandler(td.item(3), "click", function(){alert(3);})
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>事件监听</title>
</head>
<body>
<table width="60%" border="0" cellpadding="0" cellspacing="1" align="center" bgcolor="#666666" id="table_1">
<tr bgcolor="#ffffff">
<td>0</td>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
</table>
</body>
</html>
<script language="javascript">
function addEventHandler(target, type, func)
{
if (target.addEventListener)
{
target.addEventListener(type, func, false);
}
else if (target.attachEvent)
{
target.attachEvent("on" + type, func);
}
else
{
target["on" + type] = func;
}
}function Alert(v)
{
alert(v);
}var table = document.getElementById("table_1");
var td = table.getElementsByTagName("td");
for (var i = 0; i < td.length; i ++)
{
//alert(td.item(i).innerHTML);
addEventHandler(td.item(i), "click", function(){alert(i);})
}
//addEventHandler(td.item(0), "click", function(){alert(0);})
//addEventHandler(td.item(1), "click", function(){alert(1);})
//addEventHandler(td.item(2), "click", function(){alert(2);})
//addEventHandler(td.item(3), "click", function(){alert(3);})
</script>
解决方案 »
- 怎么实现jquery的mouse的一个效果
- 得到表格中的行数
- 用DIV+CSS+js做一个三行三列的页面
- 怎么判断一个字符串里分割符间是否有数据?
- js这样写会有逻辑问题吗
- 请问 下拉框 能不能实现 可以下位选择又可以直接编写内容 ?????????
- 郁闷:showModalDialog访问时处于不可编辑的状态,why?
- 类似这样的:confirm("是否真的要删除当前记录?")
- 二十万火急,我忘了是哪个元素可以实现以下功能了,只用html
- 如何用正则匹配<div class="content-listblock-text"><p>这标签?把这段内容中的<div><p><img>换成回车,怎么实现?
- document.documentElement的问题
- 在页面跳转时,触发本页面的一个函数,提示是否保存草稿
(function(n){
addEventHandler(td.item(n), "click", function(){alert(n);})
})(i);
2楼解说的我不明白,呵呵。
{
//alert(td.item(i).innerHTML);
addEventHandler(td.item(i), "click", function(){alert(i);})
}在绑定事件的时候,你的function(){alert(i);}中的i并不是特定的值,是一个引用。
当你点击td的时候,才会取出i中的值,所以,弹出来的,已经是最后一个值了。
你可以采用闭包来避免这个问题:
for (var i = 0; i < td.length; i ++)
{
(function(m){
//alert(td.item(i).innerHTML);
addEventHandler(td.item(i), "click", function(){alert(i);})}(i);
}增加了(function(){})();创建的闭包,以保证其作用域正确。