1 つ目で最も一般的な方法は、イベント ハンドラーと同じ名前の HTML 属性を指定して、イベントを HTML タグに直接登録する方法です。コードは次のとおりです:
このバインディング関数は 2 つのパラメーターを受け入れます。関数を実行する必要があります。2 番目の関数は特定の実行環境であり、指定されたスコープ内の指定された関数を呼び出し、すべてのパラメーターをまとめて渡す関数を返します。バインディング関数テクノロジと DOM2 レベルのイベント ハンドラーを使用すると、特定のスコープで実行される要素のイベント ハンドラーを登録できます。具体的な処理方法は次のとおりです。
(obj.eventHash [type] = obj.eventHash [タイプ] || [ ]).push({ "名前": タイプ, "ハンドラー": ハンドラー, "fn": fn, "スコープ": スコープ }); obj.addEventListener(type , fn, false);
} else if (obj.attachEvent) {
obj.attachEvent("on" type, fn); else {
obj[" on" type] = fn;
}
}
変更された登録イベント メソッドを使用すると、要素のイベント ハンドラーを指定された環境で実行できます。
上記のコードが実行されると、ハンドラーeventHandlerのthisスコープはwindowオブジェクトの下にあります。
先ほど紹介したバインディング関数によるイベント登録では、要素オブジェクトに対してイベントハンドラを保存するためのイベントハッシュオブジェクトが作成され、緊急時に要素がイベントハンドラを削除する際にこのハッシュオブジェクトが起動されます。状況に応じて、対応するイベント ハンドラーを正確に削除できます。イベント ハンドラーを削除するコードは次のとおりです:
function RemoveHandler ( obj, type, handler,scope) {
obj.eventHash = obj.eventHash ||
var evtList = obj.eventHash [タイプ] || len = evtList。 length;
if (len > 0) {
for (; len--; ) {
var curEvtObj = evtList[len];
if (curEvtObj.name == type && curEvtObj. handler === ハンドラー && curEvtObj.scope === スコープ) {
if (obj.removeEventListener) {
obj.removeEventListener(type, curEvtObj.fn, false); else if (obj. detachEvent) {
obj.detachEvent("on" タイプ, curEvtObj.fn);
} else {
obj["on" タイプ] = null; len, 1);
break;
}
}
}
これで、関数バインディングテクノロジを使用してイベントハンドラーを登録する方法の紹介は終わりです。特定の実行環境。同様に、関数バインディングを使用して、特定の実行環境でコールバック関数を実行できるようにすることもできます。
この記事の著作権は著者に帰属しており、転載は歓迎します。ただし、この記述は著者の承諾なしに保持し、原文へのリンクを目立つ位置に表示する必要があります。それ以外の場合は、法的責任を追及する権利が留保されます。