jQuery の one 関数について
jQuery の one 関数は便利だと思い、是非作ってみようと思いましたが、全然出来ません><
一応以下のように作ってありますが、正しく動作しない上に、name を指定して、 Listener.data オブジェクトにname で保存をするようになっていて、同じnameを渡したら上書きされてしまいます。
どうしたら、jQueryのような、one関数を作れるでしょうか?;;
var Listener={
addEvent:function(element,type,callback,useCapture){
if(element.addEventListener){
return element.addEventListener(type,callback,useCapture);
}
else if(element.attachEvent){
return element.attachEvent('on'+type,callback);
}
else{
return element['on'+type]=callback;
}
},
removeEvent:function(element,type,callback,useCapture){
if(element.removeEventListener){
element.removeEventListener(type,callback,useCapture);
}
else if(element.detachEvent){
element.detachEvent('on'+type,callback);
}
else{
return false;
}
return true;
},
addOne:function(name,element,type,callback,useCapture){
Listener.addEvent(element,type,callback,useCapture);
Listener.addEvent(element,type,function(){
Listener.removeEvent(element,type,);
},useCapture);
this.data[name]=new Function("Listener.removeEvent("+element+",'"+type+"',Listener.data['"+name+"'],"+useCapture+");+callback);
this.addEvent(element,type,this.data[name],useCapture);
},
data:{
}
};
addEventとremoveEventは正常動作しています。
現在は、
Listener.addOne('name'/*指定しなくてもいいようにしたい*/,'document'/*オブジェクトを渡すと、elementがobjectになり、未定義エラーに*/,function(){alert('OK');},true);
となっていますが、目指すは以下のような書き方です。
//仮関数定義
function test(str){
alert(str);
}
var str='test';
Listener.addOne(document,function(str){test(str);},true);
です。
一応、jQueryのone関数を見てみましたが、jQueryは使ったことが無く、あまり分かりませんでした;;
御回答宜しくお願いしますm(_ _)m
お礼
ありがとうございます。確認できました。