浏览 89 次
|
该帖已经被评为新手帖
|
|
|---|---|
| 作者 | 正文 |
|
时间: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');
}
难道匿名还是中不能定义变量?只能引用外面的值 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2008-07-25
我也遇到过同样的问题,换了个方法就解决了
你把匿名函数改成这样试试 function(){//绑定onclick事件到每个菜单项 var obj=window.srcElement; obj.addClassName('selected'); } |
|
| 返回顶楼 | |
|
时间:2008-07-25
应该是event.srcElement
|
|
| 返回顶楼 | |




