论坛首页 入门技术论坛

Event.observe不能被绑定到多个对象上?

浏览 2489 次
该帖已经被评为新手帖
作者 正文
   发表时间: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');
}


难道匿名还是中不能定义变量?只能引用外面的值
   发表时间:2008-07-25  
我也遇到过同样的问题,换了个方法就解决了
你把匿名函数改成这样试试
function(){//绑定onclick事件到每个菜单项  
                       var obj=window.srcElement;
                       obj.addClassName('selected');  
                    }
0 请登录后投票
   发表时间:2008-07-25  
应该是event.srcElement
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics