• ベストアンサー

繰り返し処理のシンプルな書き方

プログラム初心者です。 下記のようなjavascript(Ajax)を作りました。 forなどで、もう少しシンプルに書く方法はありますか? var check = ['link0', '#link1','#link2']; $(check[0]).click(function () { 処理A }); $(check[1]).click(function () { 処理A }); $(check[2]).click(function () { 処理A }); ※処理Aは同じ処理 どうぞ宜しくお願い致します。

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

  • ベストアンサー
  • cero_d
  • ベストアンサー率87% (14/16)
回答No.4

forの場合 for (key in check) { $(check[key]).click ( function() { if(this.checked) { thwrite(); } else { thremove(); } for (key in check) { if ($(check[key]).attr('id') == this.id) { $(".cell"+key).toggle(this.checked); } } }); } eachの場合 $.each(check, function(x,y){ $(y).click(function (){ if(this.checked) { thwrite(); } else { thremove(); } $(".cell"+x).toggle(this.checked); }) });

usanco
質問者

お礼

遅くなってしまい、申し訳ございません。 丁寧に教えてくださってありがとうございました!

その他の回答 (3)

回答No.3

jQueryの引数(セレクタ)はCSSセレクタのルールに準拠しているので、こういう書き方はできませんか? var check = ['#link0', '#link1','#link2']; $(check.join(',')).click(function(){ 処理A }); 未検証です。 >No.1補足 処理内容が違ってれば、別々に書かなきゃ無理ですね。 一定のルールがあれば、そのルールをプログラムに書き直せば良いですが。

usanco
質問者

補足

ご回答有難うございます。 .joinというものもあるんですね!勉強します。 大変便利なので、他のシーンがあった時、是非活用させていただきます。 no.2のLancerVIIさんの書き込みにコードを補足させて頂きましたので、 お手隙の時にでもどうぞ宜しくお願い致します。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 何かちょっとしたミスがありませんかね。 私の環境では動きましたよ。 $(check[i]).click ( function() { $(".cell"+i).toggle(this.checked); }); }; だとclass="cell0",class="cell1"とか付けないといけないので個人的にはおすすめしません。 jQueryのセレクタは柔軟に対応できるのでいろいろなアクセス方法があります。 現在のHTMLの構成と、やりたいことがわかればもうちょっとアドバイス出来ると思います。

usanco
質問者

補足

こんにちは。2度目のご回答ありがとうございます。 >class="cell0",class="cell1"とか付けないといけないので こちらは、後ほど.eachと.addClassを使って設定しようと思っておりました。 簡単に、コードを補足します。 ネットから切り貼りしたド素人製でお恥ずかしい限りなのですが、 何卒宜しくお願い致します。 イメージは、エクセルの上の部分です。 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>アルファベット順のテーブルのテスト</title> <script type="text/javascript" src="js/jquery-1.9.1.min.js"></script> <script> <!-- var alfa = ['A', 'B','C']; var check = ['#link0', '#link1','#link2']; $(document).ready(function(){ function thwrite() { var thcnt =$('th').size(); $("table#sample tr:nth-child(1)").append("<th>" + alfa[thcnt] + "</th>"); }; function thremove() { $('th:last').remove() ;} //試したコード //for ( var i = 0; i < check.legnth; i ++ ) { //$(check[i]).click ( function() { // if( this.checked ) { // thwrite(); // } else { // thremove() // } // $(".cell"+i).toggle(this.checked); //}); //}; //繰り返し出来そうな箇所 $( check[0] ).click(function () { if( this.checked ) { thwrite(); } else { thremove() } $(".cell0").toggle(this.checked); }); $( check[1] ).click(function () { if( this.checked ) { thwrite(); } else { thremove() } $(".cell1").toggle(this.checked); }); $( check[2] ).click(function () { if( this.checked ) { thwrite(); } else { thremove() } $(".cell2").toggle(this.checked); }); }); // --> </script> <style> <!-- table { font-size:12px; border:1px solid #afcbef; border-collapse:collapse; border-spacing:0; } table span { font-size:10px; } th { width:80px; background:#d3dce9; text-align:center; padding:5px; border:1px solid #afcbef; } td { text-align:center; border:1px solid #afcbef; display:none; } --> </style> </head> <body> <form name="chbox"> <input type="checkbox" id="link0"> <input type="checkbox" id="link1"> <input type="checkbox" id="link2"> </form> <table id="sample"> <tr> </tr> <tr> <td class="cell0">test0</td> <td class="cell1">test1</td> <td class="cell2">test2</td> </tr> </table> </body> </html>

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 対象の要素にclass="hoge"とつけてあげて $('.hoge').click ( function() { // 処理A }); では駄目でしょうか。 forで書きたいなら for ( var i = 0; i < check.legnth; i ++ ) { $(check[i]).click ( function() { // 処理A }); } になると思いますが。 >var check = ['link0', '#link1','#link2']; は var check = ['#link0', '#link1','#link2']; ですよね?

usanco
質問者

補足

早速のご回答ありがとうございます。 for ( var i = 0; i < check.legnth; i ++ ) { $(check[i]).click ( function() { // 処理A }); } こちらの方向で行いたいのですが、 どうやら.clickイベントが実行されないようなんです。 あと質問とは若干異なるのですが、 $(check[i]).click ( function() { $(".cell"+i).toggle(this.checked); }); }; を繰り返したいと思っています。 (処理Aが微妙に違う) >var check = ['#link0', '#link1','#link2']; すみません、#が抜けておりました。 ありがとうございます。

関連するQ&A