如果我理解正确的,你要当它被称为你的处理程序可以访问el
变量和事件对象。这是可能的,并不难,但你可能要在关闭读了起来:
link.onclick = (function(el)
{
return function (e)//this function will receive the event object
{
e = e || window.event;//for ie
LinkManager.HandleOnClick(e, el);
}
})(link);
但是,说实话,这是矫枉过正,试试这个(双关语意):
link.onclick = function(e)
{//this refers to `link`, the clicked element
e = e || window.event;//for ie
LinkManager.HandleOnClick(e, this);
};
甚至更少的代码:
link.onclick = function(e)
{//this refers to `link`, the clicked element
e = e || window.event;//for ie
LinkManager.HandleOnClick.apply(this,[e]);
//LinkManager.HandleOnClick will receive 1 argument, the event object, and 'this' will point to 'link'
};
甚至更少:
link.onclick = LinkManager.HandleOnClick;//this === link, 1 argument: the event object
也就是说,你正在遍历一个列表,并将一个事件监听器附加到每个单独的子元素。我强烈建议你使用delegaion:
if (list.addEventListener)
{
list.addEventListener('click',LinkManager.HandleOnClick,false);
}
else if (list.attachEvent)
{
list.attachEvent('onclick',LinkManager.HandleOnClick);
}
else
{
//use the loop you have now as a last resort
}
//LinkManager.HandleOnClick should start like so:
LinkManager.HandleOnClick = function(e)
{
e = e || window.event;//<- you have the event object here
var target = e.target || e.srcElement;//=== list item: your link variables, your element
console.log(this);//<-should reference the list element (<ul> || <ol>)
};
不管怎样,这就是我想解决这个
我认为您的解决方案比以前的更好...你是不是在绑定新功能每个元素,但是您正在重用相同的功能。 – 2012-07-30 14:18:47