js动态循环加载事件 本帖最后由 liyuef123 于 2011-04-04 15:17:12 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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); }} 分也不难弄,没事上来回个帖就有分了。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 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);} document.getElementById("nav"+i).onmouseover = (function (i, n) {return function() { changNav("nav",i,n);};})(i, n); 请帮忙解释下这句代码 多写大家的回答 可是都没能解决我的疑问,比如说楼上的document.getElementById("nav"+i).onmouseover = function () { changNav("nav",this.id.replace('nav', ''),n);}; }这个可以,为什么我的传i就不行呢? Javascript是动态执行的。你虽然用循环一个个的传入了函数。但是等到执行的时候,循环已经结束,i早已变成了最后一个数字。也就是说,不管你点哪一个,最后动态取得的都是7。但是,如果套一个函数在外面,动态取得的就是离调用的地方最近的一个函数的参数。也就是闭包 请问在执行的时候不是一次将i赋给函数吗? 为什么是代码都执行后在将i赋给函数呢? 不明白,请指教!!!!------------document.getElementById("nav"+i).onmouseover = function () { ……}; }注意,document.getElementById("nav"+i).onmouseover,这是一个预定发生的事件(是要在鼠标经过对象"nav"+i时才触发的),而不是在FOR循环中即时发生的。然后再看我先前所说的I的值的问题,应该能懂了吧。 js中如何将字符串转换成object类型 关于JS获取Hidden控件的值的问题 js的问题 JSTL库 foreach问题 js不能解析Action生成的json? extjs中登录表单提交成功后怎么转到其他页面 如何在web上实现对另一个应用程序的键盘输入,就像vb中的sendkey 求类似excel 用js+dhtml 写的的控件?能够编辑然后提交数据上去 简单问题,请JS高手帮忙!谢谢! 请问如何在页面的一个图片上画一个矩形,并得到这个矩形在图片上的坐标? 用jquery实现页面滚动 js节点,初学
for(var i=1;i<=n;i++) {
document.getElementById("nav"+i).onmouseover = (function (i, n) {
return function() { changNav("nav",i,n);};})(i, n);
}
}
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
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);
}
return function() { changNav("nav",i,n);};})(i, n);
请帮忙解释下这句代码
可是都没能解决我的疑问,比如说楼上的
document.getElementById("nav"+i).onmouseover = function () { changNav("nav",this.id.replace('nav', ''),n);};
}
这个可以,为什么我的传i就不行呢?
为什么是代码都执行后在将i赋给函数呢? 不明白,请指教!!!!
------------
document.getElementById("nav"+i).onmouseover = function () { ……}; }注意,document.getElementById("nav"+i).onmouseover,这是一个预定发生的事件(是要在鼠标经过对象"nav"+i时才触发的),而不是在FOR循环中即时发生的。然后再看我先前所说的I的值的问题,应该能懂了吧。