浏览 2490 次
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-07-23
问题描述:用js写一个菜单 单击菜单项后, 菜单项处于被选中的样式,点击别的菜单项后 原菜单项恢复 新菜单项处于选中状态
基本思路:div包含UL来实现. js对象只接受一个menu id参数 var myMenu = new Menu('menuId'); <div id="myMenu"> <ul> <a href=""><img class="icon" id="menu-item-1-icon" src="${pageContext.request.contextPath}/images/agent/ym_14.jpg" width="18" height="16" /><span>菜单1</span></a> <li id="menu-item-1"><a href="#" id="menu-item-link-1" class="menu-item">菜单项1</a></li> <li id="menu-item-2"><a href="#" id="menu-item-link-2" class="menu-item">菜单项2</a></li> <li id="menu-item-3"><a href="#" id="menu-item-link-3" class="menu-item">菜单项3</a></li> </ul> <ul></ul> </div> prototype js 代码: <script type="text/javascript"> var Menu = Class.create(); Menu.prototype = { initialize:function(menuId){ this.menuId = menuId; }, size: function(){ return $(this.menuId).getElementsByTagName('ul').length; }, register: function(){ var links = $(this.menuId).getElementsByTagName('li'); for(j = 0; j < links.length; j++){ Event.observe(links[j], 'click', function(){//绑定onclick事件到每个菜单项 $('menu-item-' + j).addClassName('selected'); }); }//end j } } </script> 问题: 上面红色代码就是出问题的地方。匿名函数中如果不带参数,所有绑定函数的j值为同一个,即j循环结束后的值 就是说j在这儿被传址引用了 function(){ $('menu-item-' + j).addClassName('selected'); } 换一种方式 在函数里面定义临时变量, 还是不行 function(){ var t = j; $('menu-item-' + t).addClassName('selected'); } 难道匿名还是中不能定义变量?只能引用外面的值 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-07-25
我也遇到过同样的问题,换了个方法就解决了
你把匿名函数改成这样试试 function(){//绑定onclick事件到每个菜单项 var obj=window.srcElement; obj.addClassName('selected'); } |
|
返回顶楼 | |
发表时间:2008-07-25
应该是event.srcElement
|
|
返回顶楼 | |