没有弹出框
1
2
3
4
5
6
7
|
<script language=
"javascript"
type=
"text/javascript"
>
function
start(){
var
nid=document.getElementsByTagName(
"li"
);
nid.onclick=
function
(){alert(
"4"
);}
}
window.onload=start;
</script>
|
这样才有弹出对话框
1
2
3
4
5
6
7
|
<script language=
"javascript"
type=
"text/javascript"
>
function
start(){
var
nid=document.getElementsByTagName(
"li"
);
nid.onclick=(
function
(){alert(
"4"
);})()
}
window.onload=start;
</script>
|
运行后,不论点击哪一个li,都是alert提示“4”。
这就是一个需要注意的地方:
闭包允许内层函数引用父函数中的变量,但是该变量是最终值。闭包引用的变量i,是循环结束后的值
1
2
3
4
5
6
|
<script language=
"javascript"
type=
"text/javascript"
>
var
li=document.getElementsByTagName(
"li"
);
for
(
var
i=0;i<li.length;i++){
li[i].onclick=
function
(){alert(i);}
}
</script>
|
用闭包来解决
<script language="javascript" type="text/javascript">
var li=document.getElementsByTagName("li");
for(var i=0;i<li.length;i++){
(function(index){
li[index].onclick=function(){alert(index);}
})(i);
}
</script>
var li=document.getElementsByTagName("li");
for(var i=0;i<li.length;i++){
(function(index){
li[index].onclick=function(){alert(index);}
})(i);
}
</script>
注意顺序:先弹出“clicked” 再弹出“also clicked”
1
2
3
4
5
6
7
|
<script>
var
fnClick1 =
function
(){ alert(
"clicked"
); };
var
fnClick2 =
function
(){ alert(
"also clicked"
); };
var
oDiv = document.getElementById(
"div"
);
oDiv.attachEvent(
"onclick"
,fnClick2);
oDiv.attachEvent(
"onclick"
,fnClick1);
</script>
|
先弹出“also clicked” 再弹出“clicked”
1
2
3
|
var
oDiv = document.getElementById(
"div"
);
oDiv.attachEvent(
"onclick"
,fnClick1);
oDiv.attachEvent(
"onclick"
,fnClick2);
|
.onclick后面的是最先执行的
attachEvent进去的事件 就DOM的解释是乱续的。
但实际测试时 IE是后绑定的先执行,FF是先绑定的先执行.
本文转自曾祥展博客园博客,原文链接:http://www.cnblogs.com/zengxiangzhan/archive/2009/12/02/1615644.html,如需转载请自行联系原作者