- ベストアンサー
jQueryのtoggle()を使ってチェックボックスのON/OFFでimgのclassを切り替える方法と、ボタンの反応が表示されない理由
- jQueryのtoggle()を使用して、チェックボックスのON/OFFでimgのclassを切り替える方法と、ボタンの反応が表示されない理由についてご教授ください。
- 複数のチェックボックスと画像の組み合わせに対して、簡単にまとめる方法があるかどうか教えてください。
- 合計で10個のボタンがあるため、これを複製せずにまとめる方法があるかどうかも教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
サンプルはimgではなくliになっていますが、liの中にimgがある解釈でよろしいでしょうか。 inputとliでどちらをクリックしても同じ動作をさせるという意図でしたら、それぞれにtoggleメソッドを使うとおかしな動作になると思います(←liとinputを交互にクリックしたときのことを考えてください) 大体以下の方針で変更するといいと思います。 ・liの方はtoggleは使わず、clickメソッドを使う ・inputの方はchangeメソッドを使うのが筋。ただし、jsでchecked属性を変更したときはイベントが発生しない。 ・inputとliはそれぞれ共通のclassを持たせておく。 ・セレクタは共通のクラスで指定して、eachメソッドで回し、indexに対して個別の処理をさせる。 ・チェックボックス選択時にliのスタイルを変えたいときはclassを追加する。 ・classの部分追加・削除はattrよりもaddClass、removeClassを使う方がスマート。 ・更に今回はtoggleClassを使う方がいいです。 ・checked属性の追加・削除ではなく、属性値をブールで設定する。 ・同一のjQueryオブジェクトを何度も使用するときは、初めに変数に代入しておいた方がスマート。 <script type="text/javascript"> //<![CDATA[ $(function(){ var $p = $("li.p"); var $c = $("input.c"); $p.each(function(i) { //eachメソッドのコールバック関数の第一引数はindex $(this).click(function() { $c.eq(i).attr("checked", !$c.eq(i).attr("checked")); $(this).toggleClass("p-on"); }); }); $c.each(function(i) { $(this).change(function() { $p.eq(i).toggleClass("p-on"); }); }); }); //]]> </script> <ul> <li class="p"><img src="…" /></li> <li class="p"><img src="…" /></li> … </ul> <input class="c" type="checkbox" /> <input class="c" type="checkbox" /> …
お礼
ありがとうございました! toggle()の意味をちゃんと理解してませんでした! 参考にしてみます!