IEでattachEvent/detachEventする(デモページ)

alert & detachEvent

× IEで「undefined」が返る。また、detachEventも無効。

//attachEventはIE、Operaで実行可能
window.attachEvent('onload',function(){
  document.getElementById('btn1').attachEvent('onclick',testFunc);
});
function testFunc(){
  alert(this.value); // undefined
  this.detachEvent('onclick', arguments.callee); //IEでdetachEventできない
}

△ IEで「送信する」が返る。また、detachEventも有効。

//attachEventはIE、Operaで実行可能
window.attachEvent('onload',function(){
  document.getElementById('btn2').attachEvent('onclick',testFunc);
});

function testFunc(evt){
  var _this = evt.srcElement;
  alert(_this.value); // 送信する
  _this.detachEvent('onclick', arguments.callee); //detachEvent成功
}

○ クロスブラウザで有効

//IE以外はaddEventListenerを、IEはattachEventを使用
var addEvent = document.addEventListener ?
	function(elm,type,func){elm.addEventListener(type,func,false);} :
	function(elm,type,func){elm.attachEvent('on'+type,func);};

//IE以外はremoveEventListenerを、IEはdetachEventを使用
var removeEvent = document.removeEventListener ?
	function(elm,type,func){elm.removeEventListener(type,func,false);} :
	function(elm,type,func){elm.detachEvent('on'+type,func);};

addEvent(window, 'load', function(){
	addEvent(document.getElementById('btn3'), 'click', testFunc);
});

function testFunc(evt){
	//IE以外はthisで、IEはevt.srcElementでターゲット要素を取得
	var _this = evt.target ? this : evt.srcElement;
	alert(_this.value);
	removeEvent(_this, 'click', arguments.callee);
}

ページの先頭へ戻る