【发布时间】:2012-05-19 00:44:31
【问题描述】:
这可能是一个简单的问题,但我无法找出最佳答案。
我在屏幕上有 10 个 <div> 元素。他们每个人都有一个click() 事件监听器:
<!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>
</head>
<body>
<div id="element0">Click me! (0)</div>
<div id="element1">Click me! (1)</div>
<div id="element2">Click me! (2)</div>
<div id="element3">Click me! (3)</div>
<div id="element4">Click me! (4)</div>
<div id="element5">Click me! (5)</div>
<div id="element6">Click me! (6)</div>
<div id="element7">Click me! (7)</div>
<div id="element8">Click me! (8)</div>
<div id="element9">Click me! (9)</div>
<script type="text/javascript">
for ( var i = 0; i < 10; i++ ) {
var element = document.getElementById( "element" + i );
element.onclick = function () {
alert( "Element " + i );
}
}
</script>
</body>
</html>
但每次我点击一个元素时,它都会显示“元素 10”!似乎所有这些事件处理程序都在为 i 使用相同的值。
我希望它显示“元素 N”,其中 N 是当前元素的编号。我不想从元素 id 中提取 N 。我也不想使用 jQuery 的 data() 方法来存储它。我相信这个问题必须有一个更简单的解决方案,但我找不到它。有人吗?
【问题讨论】:
-
i是在全局范围内声明的,而不是在onclick函数内,因此当在onclick内访问时,它是从全局范围内读取的。它显示10,因为那是循环的最后一次迭代。
标签: javascript