![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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ランキング
-
関数でy=g(x)のgとは何の略です...
-
JAVAスクリプトで指定時間以降...
-
functionから別のfunctionを実...
-
jQueryの"return false"の役割...
-
【JavaScript】二重送信防止
-
関数の中の値を取り出したい
-
マウスをのせてながら、2秒後に...
-
C#OpenCv V4にのエラーに関する...
-
JavaScriptとHTMLの課題です
-
<a>タグのテキストを取得
-
FireFoxのjavascriptで自動でキ...
-
クリッカブルマップのリンク部...
-
同じIDで定義した要素の配列を...
-
GASでundefinedエラーが出ます
-
【正規表現】【javascript】CR...
-
DOM要素を削除しても、イベント...
-
window.openでタイトル名の指定
-
ドラッグでセルを選択した後に
-
TexでΣの添え字の位置直し
-
undefinedを表示させない方法は...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数でy=g(x)のgとは何の略です...
-
idを使わずにonclickで自身の要...
-
functionから別のfunctionを実...
-
jslintのエラーについて質問
-
要素名がスペースを含む場合のj...
-
javascript(jQuery)でセル内...
-
ajax反映後のjqueryが動かない
-
jQueryの :not() .not() が有効...
-
getElementByIdを使用したグロ...
-
コードをスマートにさせたい。
-
クリックすると上に開くアコー...
-
jQueryの"return false"の役割...
-
jQueryが読み込めない
-
個別では動く、javascriptのエラー
-
一つのアクションで関数を二つ...
-
jqueryの変数を関数の外に出す方法
-
R言語
-
jQuery|:not(:animated)
-
即時関数でプライベート変数的...
-
スムーズに動く アニメーション...
おすすめ情報