既存のイベント ハンドラーを上書きせずに新しいイベント ハンドラーを追加するだけの場合は、 (古いバージョンの IE の場合) 、 などを設定する代わりにoraddEventListener()
を使用して、以前のイベント ハンドラーに影響を与えずに新しいイベント ハンドラーを追加できます。attachEvent()
.onclick
.onsubmit
イベントを追加するための簡単なクロス ブラウザー関数を次に示します。
// add event cross browser
function addEvent(elem, event, fn) {
if (elem.addEventListener) {
elem.addEventListener(event, fn, false);
} else {
elem.attachEvent("on" + event, function() {
// set the this pointer same as addEventListener when fn is called
return(fn.call(elem, window.event));
});
}
}
通常の JavaScript から既存の DOM オブジェクトに問い合わせて、addEventListener
またはを介してインストールされた通常の JavaScript イベント ハンドラーがどのオブジェクトにあるかを確認するクロス ブラウザーの方法はありませんattachEvent
。イベント ハンドラーが jQuery と共にインストールされている場合は、この手法で問い合わせることができます。
すべてのイベント ハンドラーをリストするプロパティを追加するために行われた将来の仕様作業がいくつかありますが、まだ実装されているかどうかはわかりません。詳細については、こちらをご覧ください。
onclick
、onsubmit
、などでインストールされたイベント ハンドラーの場合onfocus
、既存のすべての DOM 要素をチェックして、これらのイベントにハンドラーが割り当てられている要素を確認し、必要に応じてそれらをフックできます。
// add other events here you are interested in
var events = ["onclick", "onsubmit", "onfocus", "onblur"];
var elems = document.getElementsByTagName("*"), item;
for (var i = 0; i < elems.length; i++) {
item = elems[i];
for (var j = 0; j < events.length; j++) {
if (item[events[j]]) {
console.log("event handler for " + events[j]);
}
}
}