<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>如题,如何解决这个闭包问题.

解决方案 »

  1.   


    点击每一个li的时候显示它的index
      

  2.   

    function Closure() {
            var objArray = document.getElementsByTagName("li");
            for (var i = 0; i < objArray.length; i++) {
                objArray[i].onclick = (function (num) {                return (function () {
                        alert(num.toString());
                    })
                })
                     (i); //匿名函数也不行
                
            }
        }
      

  3.   

    <script type="text/javascript">
    //方法一: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>
      

  4.   

    不知楼主你要干什么?
      如果就你要那个功能用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>
      

  5.   

    当然还可以优化一下:
    <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>
      

  6.   


    <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>