我的目的是:点第一个链接弹出一个1,点第二个链接弹出一个2,依次类推,可是我不管点哪个都弹3,大家帮忙看一下是为何···
代码如下:
<html>
<head>
<script type="text/javascript">
window.onload=function ()
{
var link=document.getElementsByTagName('a');
var c=document.getElementById('place');
for(var i=0;i<link.length;i++)
{
j=i+1;
link[i].onclick=function()
{
alert(j);
return false;
}
}
}
</script>
</head>
<body>
<h1>TEST</h1>
<ul>
<li><a href="#">链接1</a></li>
<li><a href="#">链接2</a></li>
<li><a href="#">链接3</a></li>
</ul>
</body>
</html>

解决方案 »

  1.   

    方案1.   设置属性
    for(var i=0;i<link.length;i++)
        {
            j=i+1;
            link[i].j=j;
            link[i].onclick=function()
            {
            alert(this.j);
            return false;
            }
        }
    方案2  eval  这个不用我说了吧..
      

  2.   

    link[i].onclick = new Function("alert(" + j + ");return false;");
      

  3.   

    变量作用域的问题,j在执行循环以后就等于3了,不管你点那个都执行alert(j),所以都是3
      

  4.   


    jquery:
      $(document).ready(function() {
                var i = 1;
                $("a").bind("click", function() {
                    alert(i++);
                });
            });
      

  5.   

    典型的作用域问题。<html>
    <head>
    <script type="text/javascript">
    window.onload=function ()
    {
        var link=document.getElementsByTagName('a');
        var c=document.getElementById('place');
        for(var i=0;i<link.length;i++)
        {
            j=i+1;
            link[i].onclick=function(j)
            {
       return function(){alert(j)}
            }.call(null,j)
        }
    }
    </script>
    </head>
    <body>
    <h1>TEST</h1>
    <ul>
    <li><a href="#">链接1</a></li>
    <li><a href="#">链接2</a></li>
    <li><a href="#">链接3</a></li>
    </ul>
    </body>
    </html>
      

  6.   

    可否告诉下“.call(null,j)”是什么意思啊。谢谢啦。
      

  7.   

    call 方法
    请参阅
    应用于:Function 对象
    要求
    版本 5.5
    调用一个对象的一个方法,以另一个对象替换当前对象。call([thisObj[,arg1[, arg2[,   [,.argN]]]]])
    参数
    thisObj
    可选项。将被用作当前对象的对象。
    arg1, arg2, , argN
    可选项。将被传递方法参数序列。
    说明
    call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。