クロスブラウザーのイベント処理用に軽量のイベント ユーティリティを作成してきましたが、かなり高いハードルにぶつかりました。それは IE9 の srcElement プロパティに関するものですが、これは私にとってはうまくいきません!
現在、私のユーティリティは次のようになっています (srcElement は 3 番目のコード ブロックです)。
var bonsallNS = new Object();
bonsallNS.events = {
addEvent: function (node, type, func) {
if (typeof attachEvent != "undefined") {
node.attachEvent("on" + type, func);
} else {
node.addEventListener(type, func, false);
}
},
removeEvent: function (node, type, func) {
if (typeof detachEvent != "undefined") {
node.detachEvent("on" + type, func);
} else {
node.removeEventListener(type, func, false);
}
},
target: function (e) {
if (typeof srcElement != "undefined") {
return window.event.srcElement;
} else {
return e.target;
}
},
preventD: function (e) {
if (typeof srcElement != "undefined") {
window.event.returnValue = false;
} else {
e.preventDefault();
}
}
}
現在、以下のテスト スクリプトを使用すると、Chrome と Firefox では問題なく動作しますが、IE に警告しようとすると、evtTarget が未定義であることが返されます。理由がわからないので、どんな助けでも大歓迎です!以下のコードを参照してください。
var gClick = document.getElementById("clickme");
var gCount = 0;
function mssg(e){
var evtTarget = bonsallNS.events.target(e);
alert("it worked, target: " + evtTarget);
gCount++
if (gCount > 2){
bonsallNS.events.removeEvent(gClick, "click", mssg);
}
}
function setUp(){
bonsallNS.events.addEvent(gClick, "click", mssg);
}
bonsallNS.events.addEvent(window, "load", setUp);
私が言うように、IEのイベントソースを除いて、他のすべてが機能します!!