本帖最后由 liyuef123 于 2011-04-04 15:17:12 编辑

解决方案 »

  1.   

    function Bdload(n) { 
        for(var i=1;i<=n;i++) {
            document.getElementById("nav"+i).onmouseover = (function (i, n) {
    return function() { changNav("nav",i,n);};})(i, n);
        }
    }
      

  2.   

    分也不难弄,没事上来回个帖就有分了。for(i=1;i<=n;i++) {
    document.getElementById("nav"+i).onmouseover = function () { changNav("nav",i,n);}; 
    }
    你这只是设定了到时候显示I这个变量。但等你这段代码执行完毕后,I就是7了。等事件触发时,按约定去显示I时,自然就是7.解决方法除了1楼的之外,其实就是把逻辑再“程序化”一点就好了:你通过每个触发事件的对象的ID("nav"+i)不就可以得到i吗?能通过这种自然方法取到值的,就不要再传参了,会无端弄得数据关系错综复杂的。看你的代码,似乎就是实现导航标签显示风格切换,你可以看看下面的文章
    http://blog.csdn.net/theforever/archive/2010/08/23/5832244.aspx
      

  3.   

    function Bdload(n) {  
    for(i=1;i<=n;i++) {
    var n = n || 0;
    document.getElementById("nav"+i).onmouseover = function () { changNav("nav",this.id.replace('nav', ''),n);};
    }
    }
    function changNav(name,i,n){
    alert(i);
    }
      

  4.   

    document.getElementById("nav"+i).onmouseover = (function (i, n) {
    return function() { changNav("nav",i,n);};})(i, n);  
        请帮忙解释下这句代码
      

  5.   

    多写大家的回答
        可是都没能解决我的疑问,比如说楼上的
    document.getElementById("nav"+i).onmouseover = function () { changNav("nav",this.id.replace('nav', ''),n);};    
    }
    这个可以,为什么我的传i就不行呢?
      

  6.   

    Javascript是动态执行的。你虽然用循环一个个的传入了函数。但是等到执行的时候,循环已经结束,i早已变成了最后一个数字。也就是说,不管你点哪一个,最后动态取得的都是7。但是,如果套一个函数在外面,动态取得的就是离调用的地方最近的一个函数的参数。也就是闭包
      

  7.   

    请问在执行的时候不是一次将i赋给函数吗? 
    为什么是代码都执行后在将i赋给函数呢?   不明白,请指教!!!!
    ------------
    document.getElementById("nav"+i).onmouseover = function () { ……}; }注意,document.getElementById("nav"+i).onmouseover,这是一个预定发生的事件(是要在鼠标经过对象"nav"+i时才触发的),而不是在FOR循环中即时发生的。然后再看我先前所说的I的值的问题,应该能懂了吧。