チェックボックスを動的に作成しました。 addEventListener
を使用して、チェックボックスのクリック時に関数を呼び出しました。これは、Google ChromeおよびFirefoxで機能しますが、Internet Explorer 8では機能しません。これは私のコードです:
var _checkbox = document.createElement("input");
_checkbox.addEventListener("click", setCheckedValues, false);
setCheckedValues
は私のイベントハンドラです。
試してください:
if (_checkbox.addEventListener) {
_checkbox.addEventListener("click", setCheckedValues, false);
}
else {
_checkbox.attachEvent("onclick", setCheckedValues);
}
Update ::IE9より前のInternet Explorerバージョンでは、 attachEvent メソッドを使用して、指定されたリスナーを-に登録する必要があります EventTarget 呼び出されます。他の場合は addEventListener を使用する必要があります。
IE9より前のIEバージョンではattachEvent
を使用する必要があります。 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!')
});
もちろん、「クリック」の代わりに任意のイベントを指定できます。
IEはバージョン9までaddEventListener
をサポートしていません。したがって、attachEvent
を使用する必要があります。以下に例を示します。
if (!someElement.addEventListener) {
_checkbox.attachEvent("onclick", setCheckedValues);
}
else {
_checkbox.addEventListener("click", setCheckedValues, false);
}
以下のaddEvent()関数を使用してほとんどのイベントを追加できますが、IE8ではXMLHttpRequestのif (el.attachEvent)
が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
が存在することを保証しません。これは問題である場合とそうでない場合があります。
たぶん、イベント処理をテーブルなどの別の要素に委任する方が簡単です(そしてパフォーマンスが向上します)
$('idOfYourTable').on("click", "input:checkbox", function(){
});
この方法では、イベントハンドラーは1つしかなく、これは新しく追加された要素に対しても機能します。これには1.7以上のjQueryが必要です
それ以外の場合は、delegate()を使用します
$('idOfYourTable').delegate("input:checkbox", "click", function(){
});
if (document.addEventListener) {
document.addEventListener("click", attachEvent, false);
}
else {
document.attachEvent("onclick", attachEvent);
}
function attachEvent(ev) {
var target = ev.target || ev.srcElement;
// custom code
}
JQueryを使用する場合、次のように記述できます。
$( _checkbox ).click( function( e ){ /*process event here*/ } )