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
No.1ベストアンサー
- 回答日時:
よくわかってませんが…
・質問文中「callback」と書いてあるのは、function(←このままじゃまずいけど)のことでは?
・addEventで値をreturnしていますが、戻り値は常にtrueみたいなので、意味があるのだろうか?(未確認です)
・addEventに『element['on'+type]=callback;』があるけれど、removeEventのほうにはこれに対応したものがないのはなぜ?(そもそもこの部分は必要なのかどうか・・・?)
などという揚げ足取りは置いておいて・・・
addOne : function(element, type, func, useCapture) としたときに
addEventで並列にイベントのバインドとデタッチを定義しようとしているみたいですが、定義の順序と実行順って(同じと)保証されているんでしたっけ?(不確定だったような・・・未確認です)
なので、『 func実行後にremoveする 』関数をaddEventするのがよいのでは?
addOne : function(element, type, func, useCapture){
Listener.addEvent(element, type, function(){
func();
Listener.removeEvent(element, type, arguments.callee, useCapture);
}, useCapture);
}
あと、蛇足ですが
>var str='test';
>Listener.addOne(document,function(str){test(str);},true);
strがグローバルで、それを参照するなら function(){ test(str): } では?
任意の引数を渡したいのなら
(function(a){return function(){test(a)};})("other value") とか?
arguments.call!!
こんなんがあったんですねb
初めて知りました;;
おかげで、完成しました^^
また、ご指摘くださった部分も修正して、完成しました^^
本当にありがとうございましたm(_ _);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- その他(プログラミング・Web制作) Pythonで会員サイトの自動ログイン ID Nameがない 1 2022/12/16 02:09
- その他(プログラミング・Web制作) seleniumbasic chrome操作について 1 2023/03/29 15:40
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
functionから別のfunctionを実...
-
idを使わずにonclickで自身の要...
-
処理前の「お待ちください」
-
jslintのエラーについて質問
-
関数でy=g(x)のgとは何の略です...
-
javascriptで静的メンバーを実...
-
javascript(jQuery)でセル内...
-
関数名をテキストから読み込む...
-
google apps scriptの終了のさせ方
-
同じIDで定義した要素の配列を...
-
<a>タグのテキストを取得
-
C#OpenCv V4にのエラーに関する...
-
C#で、ContextMenuStripに動的...
-
ジェネレーターの作り方
-
mousewheelイベントについて
-
ActiveXobjectが作成できない
-
VBAでIEのボタンを押してメッセ...
-
フォーム入力値の重複チェック
-
Boolean型配列中のTrueの有無を...
-
乗換案内 VBAで操作したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
idを使わずにonclickで自身の要...
-
functionから別のfunctionを実...
-
関数でy=g(x)のgとは何の略です...
-
jslintのエラーについて質問
-
クリックすると上に開くアコー...
-
XMLHttpRequestでキャッシュを...
-
ajax反映後のjqueryが動かない
-
要素名がスペースを含む場合のj...
-
function(e)の意味を教えてくだ...
-
jQueryの :not() .not() が有効...
-
jQueryでzipを解凍読み込みする...
-
getElementByIdを使用したグロ...
-
関数名をテキストから読み込む...
-
jqueryuiのdialog
-
addEventListener()でリスナー...
-
jqueryのグローバル変数とロー...
-
jQuery 同じ処理を関数にまとめ...
-
drawImageの描画順序の指定につ...
-
XMLHttpRequestオブジェクトが...
-
jQueryが読み込めない
おすすめ情報