var mresult=document.getElementsByTagName("li");
for(var i=0;i<mresult.length;i++)
{
mresult[i].onmouseover=function()
{
a();
display(mresult[i])
}
};
function a()
{
alert(mresult[i]);
}
function display(obj)
{
alert(obj);
}
为什么输出的都是undifined,如果我需要它输出mresult数组中的制定指定元素,应该怎么做?
onmouseover=function 只是注册事件,当事件触发时才执行,事件触发时调用mresult[i]为undifined,此时i的值为mresult.length,因为for(var i=0;i=mresult.length时退出的循环.
后边的function a()同理,楼主可以在方法里alert(i)看看.
应该这样做,使用闭包
[code="java"]
window.onload=function(){
var mresult=document.getElementsByTagName("li");
for(var i=0;i<mresult.length;i++)
{
mresult[i].onmouseover=function(v){
var i=v;
return function(){a(i);display(mresult[i])}
}(i);
};
function a(i)
{
alert(mresult[i]);
}
function display(obj)
{
alert(obj);
}
}
[/code]
首先,你的function a() { alert(mresult[i]); }方法里面的mresult[i]已经超出了作用域了,还有在JS中的传值和传递对象和Java中也是有区别的,修改方案是:
[code="java"]
lia=mresult[i];lia.onmouseover=function()
{
a(lia);
display(lia);
}
[/code] 这样就可以了。。