イベントプロトタイプにメソッドを追加しようとしています。またはを呼び出す/設定するためにpreventDefault()
、IEで-話すreturnValue = false
と-必要に応じて- stopPropagation()
/ cancelBubble = true;
。以下のコードで十分だと思いました。
Event = Event || window.Event;
//^^ makes the fiddle work on IE8 ^^
if(!(Event.prototype.stopEvent))
{
Event.prototype.stopEvent = function(propagate)
{
"use strict";
propagate = (propagate ? true : false);
if (this.preventDefault)
{
this.preventDefault();
if (propagate === false)
{
this.stopPropagation();
}
}
else
{
this.returnValue = false;
this.cancelBubble = !propagate;
}
return this;
};
}
あなたがここで見ることができるように、これはうまくいくようです。このフィドルはOK
IE8、Firefox、Chromeで表示されます。ただし、これをスクリプトに追加すると、IE8は最初の行で「イベントは未定義です」と中断します。除外し"use strict";
てもまったく違いはありません。
しぶしぶ、私もこれを試しました:
if (typeof Event === 'undefined')
{
var Event = window.Event || window.event;//FFS IE :-(
}
しかし、無駄に:Error: 'Event.prototype' is null or not an object
、それで私はさらに1行を得ました。問題は、プロトタイプメソッド全体がスクリプトからのコピーペーストですが、ここで何を見落としているのでしょうか。何かアイデア/提案はありますか?
ありがとう
PS:私はPure JavaScriptが好きなので、解決策としてjQuery、prototypejs、dojoなどを提案しないでください。jQueryを削除しました。(私はjQueryが好きですが、この場合は必要ありません)
アップデート
事態は悪化しました、私は恐れています。このMSDNリファレンスを見つけました。ページ全体でDOM要素のプロトタイプを扱います。それらはIE8で(ある程度)利用可能で使用可能であると言っても過言ではありません。このページで、このコードが私の目に留まりました。
Event.prototype.stopPropagation = function ()
{
this.cancelBubble = true;
};
Event.prototype.preventDefault = function ()
{
this.returnValue = false;
};
ページの約3/4の位置にある。というタイトルのセクションにあり"Powerful Scenarios"
ます。これは、私の考えでは、私がやりたいこととまったく同じですが、さらに、jsfiddleを介してこのコードを試してみると、機能しませんが、私のjsfiddle(私のコードを使用)はIE8で機能しました。これはスニペットの最後の数行にすぎませんが、私が理解できる限り、これらの数行のコードは問題なく機能するはずです。私はそれらを次のように変更しました:
Event.prototype.stopPropagation = function ()
{
if (this.stopPropagation)
{
return this.stopPropagation();
}
this.cancelBubble = true;
};
Event.prototype.preventDefault = function ()
{
if (this.preventDefault)
{
return this.preventDefault();
}
this.returnValue = false;
};