<html><body>
<input type="button" id="R1">
<input type="button" id="R2">
<script language="javascript" type="text/javascript">
function a()
{
for (i=1 ;i<3 ;i++ )
{
document.getElementById("R"+i.toString()).onclick=function(){onclick_event(i);}
}}
function onclick_event(num)
{
alert(num);
}
a();</script>
</body></html>
按正常的说这里动态捆绑了两个button 的事件为alert()
第一个按钮按下的应该是1
第二个应该是2
但结果相反全都是输出3也就是i的最大值
这里为什么把i当作静态变量传给onclick_event了?这里的i应该不会是3吧
最大值是2
为什么总是输出3??
<input type="button" id="R1">
<input type="button" id="R2">
<script language="javascript" type="text/javascript">
function a()
{
for (i=1 ;i<3 ;i++ )
{
document.getElementById("R"+i.toString()).onclick=function(){onclick_event(i);}
}}
function onclick_event(num)
{
alert(num);
}
a();</script>
</body></html>
按正常的说这里动态捆绑了两个button 的事件为alert()
第一个按钮按下的应该是1
第二个应该是2
但结果相反全都是输出3也就是i的最大值
这里为什么把i当作静态变量传给onclick_event了?这里的i应该不会是3吧
最大值是2
为什么总是输出3??
定义按钮的onclick事件,执行函数function(){onclick_event(i);},但是此时并没有执行,等到页面加载完毕,点击按钮触发此事件时,i已经变成了3,所以才会出现lz遇到的问题这样改
document.getElementById("R"+i.toString()).onclick=tt(i);
执行tt函数,参数为i
funcion tt(i){
return function (){onclick_event(i);};
}
这样i为1的时候,返回函数为function (){onclick_event(1);};
i为2的时候,返回函数为function (){onclick_event(2);};
究竟是怎么样子的??onclick=function(){onclick_event(i);} 这样的正确意思是怎么样??
document.getElementById("R"+i.toString()).onclick=function(){onclick_event(i);}
和
document.getElementById("R"+i.toString()).onclick=tt(i);
执行tt函数,参数为i
funcion tt(i){
return function (){onclick_event(i);};
}
当鼠标点击时,onclick的值function(){onclick_event(i);}都是一样的
i并没有被替换掉function可以看作一个代理类,具有代理的功能,和delegate意思上差不多
要解释上述出现的问题,应该考虑javascript内存的操作了function a()
{
for (var i=1 ;i<3 ;i++ )
{
document.getElementById("R"+i.toString()).onclick=tt(i);
//document.getElementById("R"+i.toString()).onclick=function(){onclick_event(i);}
//alert(document.getElementById("R"+i.toString()).onclick);
}
}function onclick_event(num)
{
alert(num);
alert(document.getElementById("R"+num.toString()).onclick);
}function tt(i)
{
return function()
{
onclick_event(i);
};
}
a();
其实function 我也觉得是一个deletgate
delegate我不怎么熟悉只了解到对象的事件关联是靠这东西来实现的
大概也了解到delegate 是一个函数指针
但就不了解function