- ベストアンサー
[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('変更されました。'); }); ご教示願います。。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
//23歳の事務系OLです。 ためしてないけど、どうでしょう? さいきんの、おれいの無さに、ぎゃく釣りしてみました。^^; for (i=1; i <= test; i++) { $("#test_list"+ i).change( (function(_i){ return function( ) { $("#test_txt"+ _i ).text('変更されました。'); }; })(i) ); }
その他の回答 (3)
- yyr446
- ベストアンサー率65% (870/1330)
命名します。 「一発屋関数の勝負」 (function(arg){ ...=arg; })(xx); 「一発屋関数の使いまわしで勝負」 (function(arg){ return function(){ ...=arg; }; })(xx);
- fujillin
- ベストアンサー率61% (1594/2576)
99歳の行き倒れです。 #1様の//に釣られてみました。 こんなのでもいけると思う。 for (i=1; i <= test; i++) { $("#test_list"+ i).change( new Function ( '$("#test_txt"+' + i + ').text("変更されました。")') ); } ()内が文字列として扱えるので簡単。ご質問の最後の例示にほぼ近い形になっていると思う。 でも、調子に乗っていっぱい作りまくるとパフォーマンスに影響がでるとか… 参考まで。
- babu_baboo
- ベストアンサー率51% (268/525)
せいしきな、なまえは、しらないじょ!? (そんなのは、どうでもいいことさ。とおもっているから)
お礼
うまくいきました!感謝します。 ちなみに、この方法の一般的な名称とかあったら教えてください。 なになに~っていうやり方とか・・。