私が継承した非常に見栄えの悪いイベントバインディングラッパーがありますが、その理論的根拠は私にはわかりません。attachEvent
私が知っているのは、それを使用するプラグインの IE 実装が、 jQuery を介してシンプルまたはエイリアスに置き換えようとすると壊れるということだけです。 .
function AddEvent(obj, type, fn) {
if (obj.attachEvent) {
obj['e' + type + fn] = fn;
obj[type + fn] = function() {
obj['e' + type + fn](window.event);
};
obj.attachEvent('on' + type, obj[type + fn]);
}
else {
obj.addEventListener(type, fn, false);
}
};
イベント フックの名前が付けられた HTML 属性または DOM プロパティに関数を直接アタッチする非常に基本的な方法はよく知っていますが、これはかなり面倒に見えます。何が起こっているのかについての私の解釈は次のとおりです。
e
イベント フック ラベルと文字列型強制関数 (!?) で構成される、プレフィックス付きの文字列を作成します。問題の要素にその名前のプロパティを作成し、それに関数を割り当てます。
obj['e' + type + fn] = fn;
接頭辞のない同じ文字列は、要素の別のプロパティになり、関数を呼び出します。この関数は、渡された元の関数を (何らかの理由で、定義したばかりのエイリアスを使用して)window.event
引数として実行します。
obj[type + fn] = function() {
obj['e' + type + fn](window.event);
};
最後に、attachEvent
メソッドを使用して前の関数をイベント フックにバインドします。
obj.attachEvent('on' + type, obj[type + fn]);