2010-07-22 152 views
0

看看这个简单的示例将参数传递给事件功能

<input type="button" value="btn1" id="btn1" /> 
<input type="button" value="btn2" id="btn2" /> 
<input type="button" value="btn3" id="btn3" /> 
<input type="button" value="btn4" id="btn4" /> 
<input type="button" value="btn5" id="btn5" /> 

<script> 
    for (i=1; i<5; ++i){ 
     var btn = document.getElementById('btn' + i); 
     btn.onmouseover = function(){ 
      alert(i); 
     } 
    } 
</script> 

我希望它应该例如1警报,当我继续前进btn1我的鼠标,但不幸的是它提醒5了!

我如何将循环中的变量传递给函数?

回答

3

这是闭环问题。所有鼠标悬停在同一个变量上,因为JavaScript只有函数范围。您可以通过创建一个新功能来修复它,从而创建一个新的范围。

for (i=1; i<5; ++i){ 
    (function(i) 
    { 
     var btn = document.getElementById('btn' + i); 
     btn.onmouseover = function(){ 
      alert(i); 
     } 
    })(i); 
} 
+0

上帝保佑你!谢谢:-) – Ehsan 2010-07-22 06:06:39

+0

@Ehsan请注意,函数体中的形式参数'i'和'i'与'for'语句中初始化的'i'不同,并作为实际参数传递给函数。 – 2010-07-22 06:08:08

+0

我知道,谢谢。 在过去的10年中,这是我脑海中的一个问题,但至今我一直没有答案!任何时候我碰到这堵墙,我都会以一种讨厌的方式解决它。 祝你有个美好的一天:-) – Ehsan 2010-07-22 06:19:51