回答:
試してください:
if (_checkbox.addEventListener) {
_checkbox.addEventListener("click", setCheckedValues, false);
}
else {
_checkbox.attachEvent("onclick", setCheckedValues);
}
更新: IE9より前のバージョンのInternet Explorerでは、attachEventメソッドを使用して、指定されたリスナーを、それが呼び出されるEventTargetに登録する必要があります。その他の場合は、addEventListenerを使用する必要があります。
attachEvent
IE9より前のIEバージョンで使用する必要があります。addEventListener
が定義されているかどうかを検出し、定義されattachEvent
ていない場合は使用します。
if(_checkbox.addEventListener)
_checkbox.addEventListener("click",setCheckedValues,false);
else
_checkbox.attachEvent("onclick",setCheckedValues);
// ^^ -- onclick, not click
IE11では削除されることにattachEvent
注意してください。
以下も参照してください。
これもシンプルなクロスブラウザソリューションです。
var addEvent = window.attachEvent||window.addEventListener;
var event = window.attachEvent ? 'onclick' : 'click';
addEvent(event, function(){
alert('Hello!')
});
もちろん、「クリック」の代わりに任意のイベントを使用できます。
addEventListener
の3番目の引数はとにかくオプションなので、これは良い解決策になる可能性があり、if-elseブランチよりも優れています。しかし、この場合、_checkbox
はターゲット要素であり、ではありませんwindow
。:)そのため、イベントターゲットが別の引数である関数を作成することができます。
addEventListener
通話-このトピックを参照してください。stackoverflow.com/questions/1007340/...を。したがって、window
オブジェクトの場合は正しく機能しますが、ドキュメント内の他のノードでは機能しません。このように、提案されたエイリアスは、元の質問で言及されたケースに対して正しくありません!あなたの回避策は何ですか?
IEはaddEventListener
バージョン9までサポートしていないため、を使用する必要があります。以下にattachEvent
例を示します。
if (!someElement.addEventListener) {
_checkbox.attachEvent("onclick", setCheckedValues);
}
else {
_checkbox.addEventListener("click", setCheckedValues, false);
}
イベント処理をテーブルなどの別の要素に委任すると、より簡単になります(パフォーマンスが向上します)。
$('idOfYourTable').on("click", "input:checkbox", function(){
});
このようにして、イベントハンドラは1つだけとなり、これは新しく追加された要素に対しても機能します。これにはjQuery> = 1.7が必要です
それ以外の場合はdelegate()を使用します
$('idOfYourTable').delegate("input:checkbox", "click", function(){
});
以下のaddEvent()関数を使用してほとんどのイベントを追加できますが、XMLHttpRequest if (el.attachEvent)
はIE8でサポートされていないため失敗することに注意してください。代わりXMLHttpRequest.attachEvent()
に使用する必要がありますXMLHttpRequest.onload = function() {}
。
function addEvent(el, e, f) {
if (el.attachEvent) {
return el.attachEvent('on'+e, f);
}
else {
return el.addEventListener(e, f, false);
}
}
var ajax = new XMLHttpRequest();
ajax.onload = function(e) {
}
上記の回答に基づいて簡単なポリフィルを選択しました:
//# Polyfill
window.addEventListener = window.addEventListener || function (e, f) { window.attachEvent('on' + e, f); };
//# Standard usage
window.addEventListener("message", function(){ /*...*/ }, false);
もちろん、上記の回答のようにwindow.attachEvent
、これが存在することを保証するものではありません。