如果我理解正確的,你要當它被稱爲你的處理程序可以訪問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