这可能是一个简单的问题,但我无法弄清楚它的最佳答案。Javascript中的事件处理程序范围
我在屏幕上有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',因为那是循环的最后一次迭代。 – MrCode