返回信息流一段代码,想实现超链接点击后出现alert(1),alert(2),结果出现全是alert(2)
有什么办法可以做到我这个要求呢?
<html>
<head>
<script>
function init(){
var arr = document.getElementsByTagName("a");
for(var i=0;i<arr.length;i++){
arr[i].onclick=function(){
alert(i);
}
}
}
</script>
</head>
<body onload="init()">
<a href="">链接一</a>
<a href="">链接二</a>
</body>
</html>
这是一条镜像帖。来源:北邮人论坛 / java / #22214同步于 2012/4/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
一段js代码的问题
andrew219219
2012/4/21镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
for(var i=0;i<arr.length;i++){
arr[i].onclick=function(){
var j =i+1;
return function(){
alert(j);
}
}()
能解释一下原因吗?
然后解释一下为什么 onclick=function(){...}()
这个最后是括号结尾呢?
【 在 seaver 的大作中提到: 】
: for(var i=0;i<arr.length;i++){
: arr[i].onclick=function(){
: var j =i+1;
: ...................
【 在 andrew219219 的大作中提到: 】
: 能解释一下原因吗?
: 然后解释一下为什么 onclick=function(){...}()
: 这个最后是括号结尾呢?
: ...................
括号结尾是立即执行该匿名函数,这样j就是i当前值+1
function init(){
var arr = document.getElementsByTagName("a");
for(var i=0;i<arr.length;i++){
(function(i){
arr[i].onclick=function(){
alert(i);
}
})(i)
}
}
其实做这个的目的说白了就是将i自增的值进行缓存,在增的过程中读取值,而不是增完了在读取。