重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

下記のようなコールバック関数(?)が10コ続いているとき、
for文か何かでループさせ分かりやすく書きたいのですが、どうすれば良いでしょうか?

$('#id1').hoge(params, options, function(){
 $('#id2').hoge(params, options, function(){
  //処理
 });
});
※jQuery利用してます

A 回答 (3件)

同じ params, options を用いて、対象のidだけ替えて同じ処理をするものと解釈しました。



関数 hoge() のほうをパラメータとid(配列)を渡すと、その配列の要素数だけ処理後に再帰するようなしくみにしておけばよいのでは?
関数コールは
  hoge(params, options, ["#id1", "#id2", "#id3"]);
のような感じ。

hoge()の方は内容が不明なのでかけませんが、雰囲気として
 function hoge(params, options, elements){
  var index = arguments[3] || 0;
   if(elements[index]){
    //element[index]に対して処理を行なう(indexをインクリメント)
    ~~~~, function(){ //←コールバック関数
     hoge(params, options, elements, index);
   };
  }
 }
みたいな感じでどうでしょうか?
これを上述のように呼び出せばよろしいかと…
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>同じ params, options を用いて、対象のidだけ替えて同じ処理をするものと解釈しました
・整理できていないこちらの意向を汲み取っていただきありがとうございます!
・おかげで希望通り動作させることができました

>var index = arguments[3] || 0;
・ループと言えばfor文しか頭に思い浮かばないのですが、再帰処理でこういう書き方も出来るとは目からうろこでした
・大変参考になりましたー

お礼日時:2013/11/14 16:23

ANo2です。



ちょっとわかりにくかったかも。
『hogeメソッドを実行するhogehoge関数を作る』と言ったほうが良かったかもしれません。

さらに、そのhogehogeをメソッド化しておくという考えもあるかと思いますが、多分、必要ないのではと思います。
    • good
    • 0
この回答へのお礼

補足ありがとうございました。
・初めarguments[3]ってどこにあるのだろう? とちょっと悩みました
・大変勉強になりましたー

お礼日時:2013/11/14 16:27

for文は同じ作業を繰り返す際に有効な文ですが、入れ子になると関数スコープが異なるので同じ作業ではありません。


複数のcallback関数を渡して内部で関数を作り直せば理論上は実装できるとは思いますが、実装が複雑になるのでお勧めしません。
とりあえず、入れ子にならない設計になるようにアルゴリズムを考え直すか、現コードが読みやすいと思えるまで目を慣らすか。

コードが断片的過ぎてアルゴリズムを見直す余地があるかはわかりませんが、関数hogeを何度もcallするなら関数hogeを見直す余地はあるかもしれません。
    • good
    • 0
この回答へのお礼

回答ありがとうございましたー

お礼日時:2013/11/14 16:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!