• ベストアンサー

[jQuery]イベント定義時のコールバック関数に引数を渡したい

■以下のHTMLが1~5の5個あるとします。 <select id="test_list1"> <option value="1">あいうえお</option> <option value="2">かきくけこ</option> </select> <div id="test_txt1"></div> ■jqueryで以下のように、セレクトボックスを変更したら、それに紐づくdivタグのテキストを書き換えるとします。 var test = 5; for (i=1; i <= test; i++) { $("#test_list"+ i).change( function() { $("#test_txt"+ i ).text('変更されました。'); }); } change()イベント時は、iの値が正常なんですが、 text()で書き換え時は、iの値が常に5になってしまいます。 text()で書き換え時のiは、イベント定義時のiではないということは分かるのですが、 解決の方法がわかりません。 こんなふうに引数として渡すことはできないのでしょうか? $("#test_list"+ i).change( function( i ) { $("#test_txt"+ i ).text('変更されました。'); }); ご教示願います。。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

//23歳の事務系OLです。 ためしてないけど、どうでしょう? さいきんの、おれいの無さに、ぎゃく釣りしてみました。^^; for (i=1; i <= test; i++) {  $("#test_list"+ i).change(   (function(_i){    return function( ) {     $("#test_txt"+ _i ).text('変更されました。');    };   })(i)  ); }

karace
質問者

お礼

うまくいきました!感謝します。 ちなみに、この方法の一般的な名称とかあったら教えてください。 なになに~っていうやり方とか・・。

その他の回答 (3)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.4

命名します。 「一発屋関数の勝負」 (function(arg){   ...=arg; })(xx); 「一発屋関数の使いまわしで勝負」  (function(arg){    return function(){     ...=arg;    };   })(xx);

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

99歳の行き倒れです。 #1様の//に釣られてみました。 こんなのでもいけると思う。 for (i=1; i <= test; i++) { $("#test_list"+ i).change( new Function ( '$("#test_txt"+' + i + ').text("変更されました。")') ); } ()内が文字列として扱えるので簡単。ご質問の最後の例示にほぼ近い形になっていると思う。 でも、調子に乗っていっぱい作りまくるとパフォーマンスに影響がでるとか… 参考まで。

回答No.2

せいしきな、なまえは、しらないじょ!? (そんなのは、どうでもいいことさ。とおもっているから)

関連するQ&A