私の理解が正しければ、ハンドラーが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
とはいえ、リストを反復し、個々の子要素にイベント リスナーをアタッチしています。委任を使用することを強くお勧めします。
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>)
};
とにかく、それが私がこれに取り組む方法です