イベント委任を使用した提案:
(function()
{
function callback(e)//IE doesn't pass event object, but we'll fix that
{
var target;
e = e || window.event;//get IE event
target = e.target || e.srcElement;//IE again
if (target.tagName !== 'A')
{
return true;
}
//a link has been clicked, target holds a reference to that link, e is the click event
alert(target.href);
//to prevent the link to be followed:
if (e.preventDefault)
{// all major browsers, except for ie
e.preventDefault();
e.stopPropagation();
return false;
}//now IE again:
e.returnValue = false;
e.cancelBubble = true;
return false;//not required to return here
}
if (document.body.addEventListener)
{
document.body.addEventListener('click',callback,false);
}
else
{
document.body.attachEvent('onclick',callback);//for IE > 9
}
})();
このように、1 つのイベント リスナーを 1 つのハンドラーにバインドするだけで、ページの任意の場所でクリックされたすべてのリンクを処理します。特定のリンクのみをブロック/処理したい場合は、それらに個別のクラスを指定し、コールバック関数を次のように編集できます。
if(target.tagName !== 'A')
//add extra check:
if (target.tagName !== 'A' && target.className !== 'handleThisLinkClass')
google JavaScript のイベント デリゲーションは、特にイベント ハンドラーを必要とする要素の大規模なコレクションを処理する場合に、非常に便利な機能です。