<body onload="Closure();">
<script type="text/javascript">
function GetLi(num){ alert(num.toString());}
function Closure(){
var objArray = document.getElementsByTagName("li");
for(var i=0;i<objArray.length;i++){
objArray[i].onclick=function(){
//alert(i);
//GetLi(i);//这种办法无法解决闭包问题
(function(num){ alert(num.toString()); })(i);//匿名函数也不行
}
}
}
</script> <div id="divView"></div>
<ul id="myUl">
<li style="cursor:pointer;">me is 0</li>
<li style="cursor:pointer;">me is 1</li>
<li style="cursor:pointer;">me is 2</li>
<li style="cursor:pointer;">me is 3</li>
<li style="cursor:pointer;">me is 4</li>
<li style="cursor:pointer;">me is 5</li>
</ul>
</body>如题,如何解决这个闭包问题.
点击每一个li的时候显示它的index
var objArray = document.getElementsByTagName("li");
for (var i = 0; i < objArray.length; i++) {
objArray[i].onclick = (function (num) { return (function () {
alert(num.toString());
})
})
(i); //匿名函数也不行
}
}
//方法一:jquery
$(function(){
$("li").each(function(i){
var val = i;
$(this).click(function(){
alert(val);
});
});
});//方法二:不用jquery, 先设置它的自定义属性,当点击时,再取出。
window.onload = function(){
var lis = document.getElementsByTagName("li");
for(var i = 0; i < lis.length; i++){
lis[i].setAttribute("num", i);
lis[i].onclick = function(){ alert(this.getAttribute("num")); };
}
}
</script>
如果就你要那个功能用jquery 就可以很easy 搞定了!
想必你是学生:
我就贴出代码参考吧!
<html>
<head>
<title>一个测试</title>
<script src="js/jquery-1.4.2.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
$("#myUl li[para]").click(function() {
alert($(this).attr("para"));
}).mouseenter(function(){
$("#showLi").html($(this).html());
});
});
</script>
</head>
<body>
<div id="showLi">me is null</div>
<ul id="myUl">
<li style="cursor: pointer;" para="0">me is 0</li>
<li style="cursor: pointer;" para="1">me is 1</li>
<li style="cursor: pointer;" para="2">me is 2</li>
<li style="cursor: pointer;" para="3">me is 3</li>
<li style="cursor: pointer;" para="4">me is 4</li>
<li style="cursor: pointer;" para="5">me is 5</li>
</ul>
</body>
</html>
<html>
<head>
<title>一个测试</title>
<style type="text/css">
#myUl li[para]"
{
cursor: pointer;
}
</style>
<script src="js/jquery-1.4.2.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
$("#myUl li[para]").click(function() {
alert($(this).attr("para"));
}).mouseenter(function(){
$("#showLi").html($(this).html());
});
});
</script>
</head>
<body>
<div id="showLi">me is null</div>
<ul id="myUl">
<li para="0">me is 0</li>
<li para="1">me is 1</li>
<li para="2">me is 2</li>
<li para="3">me is 3</li>
<li para="4">me is 4</li>
<li para="5">me is 5</li>
</ul>
</body>
</html>
<body onload="Closure();">
<script type="text/javascript">
function GetLi(num){ alert(num.toString());}
function Closure(){
var objArray = document.getElementsByTagName("li");
for(var i=0;i<objArray.length;i++){
//闭包的用法,function(num){...}(i)是匿名函数,那么该函数作用域内就存了一份i的拷贝,然后click触发function(){alert(num.toString());},
//函数中的num是从function(num){...}(i)作用域中取来的,也就是i的拷贝
objArray[i].onclick=function(num){
return function(){alert(num.toString());};
}(i)
}
}
</script> <div id="divView"></div>
<ul id="myUl">
<li style="cursor:pointer;">me is 0</li>
<li style="cursor:pointer;">me is 1</li>
<li style="cursor:pointer;">me is 2</li>
<li style="cursor:pointer;">me is 3</li>
<li style="cursor:pointer;">me is 4</li>
<li style="cursor:pointer;">me is 5</li>
</ul>
</body>