(jQuery)同じクラス名のオブジェクトを一斉操作する方法

このQ&Aのポイント
  • jQueryで同じクラス名のオブジェクトを一斉操作する方法を教えてください。
  • 3つのチェックボックスのいずれかにチェックを入れるとdisabledである「お問合わせ」と「お申込み」ボタンがクリックできるようにしたいです。1つでもチェックが入っていなければボタンはdisabledにしたいです。
  • 現在、3つのチェックボックスの1番上のclass="foo"のみクリックすると動作しています。
回答を見る
  • ベストアンサー

(jQuery)同じクラス名のオブジェクトを一斉操

jQueryで同じクラス名のオブジェクトを一斉操作するにはどうしたら良いでしょうか? 【したいこと】 3つのチェックボックスのいずれかにチェックを入れると disabledである「お問合わせ」と「お申込み」ボタンがクリックできるようにしたいです。 1つでもチェックが入っていなければボタンはdisabledにしたいです。 【現状】 3つのチェックボックスの1番上のclass="foo"のみクリックすると動作します。 ▼【 HTML 】 <input type="checkbox" class="foo"> <input type="checkbox" class="foo"> <input type="checkbox" class="foo"> <input type="submit" class="bar" value="お問合わせ"> <input type="submit" class="bar" value="お申込み"> ▼【 jQuery 】 // アクセス時はボタンは無効にする。 $(document).ready(function(){   $('.bar').attr('disabled', true); }); // チェックボックスクリックアクション $('.foo').click(function() {   $('.bar').each(function() {     if($('.foo').prop('checked') == true) {       $('.bar').attr('disabled', false);     } else {       $('.bar').attr('disabled', true);     }   }); }); ご教授の程どうぞ宜しくお願い致しますm(__)m

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

  • ベストアンサー
  • sanzero
  • ベストアンサー率56% (58/102)
回答No.2

チェックしたチェックボックスの数とチェックボックスの総数が 同じかどうかというフラグで判断すると記述が短くて済みます。 $(".foo").click(function(){ var disabled_flg = $(".foo:checked").length !== $(".foo").length; $(".bar").prop("disabled", disabled_flg); });

i-love-fit
質問者

お礼

ご回答有難う御座います! こちら下記の様にすることで思い描いていた動きになりました! $(document).ready(function(){  if($(".foo:checked").length) {   $(".bar").prop("disabled", false);  } else {   $(".bar").prop("disabled", true);  } }); $(".foo").click(function(){  var disabled_flg = $(".foo:checked").length;  if (disabled_flg) {   $(".bar").prop("disabled", false);  } else {   $(".bar").prop("disabled", true);  }; }); 果たしてこちらが正しいかどうか分かりませんが、参考になるソースを頂き勉強になりました。 No1,No2を両方ベストアンサーにすることは出来ないのですね。(*_*; こちら一番少ない記述で分かりやすかったのでベストアンサーにしたいと思います。(pringlezさん、申し訳ないです。) jQueryを始めたばかりで全くの初心者ですが又ご質問するかもしれません。 その際は恐れ入りますがどうぞ宜しくお願い致します!m(__)m

その他の回答 (1)

  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.1

$(document).ready(function(){   $('.bar').prop('disabled', true); }); $('.foo').click(function() {   if ($('.foo').eq(0).prop('checked') && $('.foo').eq(1).prop('checked') && $('.foo').eq(2).prop('checked')) {     $('.bar').prop('disabled', false);   } else {     $('.bar').prop('disabled', true);   } }); こういうことでしょうか。値のセットはまとめてできるけど、チェックされているかどうかは一つ一つ判断しないとダメです。 あと、disabledのセットはattrでも一応動きますが、本来の文法上はpropが正しいです。理解不足の初心者だと思われるのでpropを使うようにしたほうがいいでしょう。 jQuery propとattr - instant tools http://tools.m-bsys.com/ex/attr-prop.php

i-love-fit
質問者

お礼

ご回答有難う御座います! eq(index)で1つ1つチェックという方法もあるのですね。 こちら勉強になりました。 ぐぐってみると、 Attr()でdisabledを付加させたり、removeAttr()で削除させたりという記事があるのですがよく見ると文法が違っていました。 こちら正しい記述方法をレクチャー頂きまして有難う御座います。m(__)m 解決後のソースはこのようになりました。 ご提示頂きましたeq()の使い方も今後使用する機械がありそうなので学習したいと思います。 果たしてこちらが正しいかどうか分かりませんが^^; $(document).ready(function(){  if($(".foo:checked").length) {   $(".bar").prop("disabled", false);  } else {   $(".bar").prop("disabled", true);  } }); $(".foo").click(function(){  var disabled_flg = $(".foo:checked").length;  if (disabled_flg) {   $(".bar").prop("disabled", false);  } else {   $(".bar").prop("disabled", true);  }; }); jQueryを始めたばかりで全くの初心者ですが又ご質問するかもしれません。 その際は恐れ入りますがどうぞ宜しくお願い致します!m(__)m

関連するQ&A

  • jqueryについて

    ただいま、jqueryのtoggle()を使って、 チェックボックスのON/OFFでimgのclassを切り替える(imgをクリックしてチェックボックスをON/OFFもできる)ということを しているのですが、なぜか、チェックボックスをクリックしても、 ボタンの反応はしているのですが、チェック(黒い「レ」)が表示されません。 以下、jsです。 ※チェックボックスと画像の組み合わせは複数あります。 $(function(){ $("li.p01").toggle( function(){ $("input.c01").attr("checked","checked"); $("li.p01").attr("class","p01on"); }, function(){ $("input.check01").removeAttr("checked"); $("li.p01on").attr("class","p01"); } ); $("input.check01").toggle( function(){ $("li.p01").attr("class","p01on"); }, function(){ $("li.p01on").attr("class","p01"); } ); $("li.p02").toggle( function(){ $("input.check02").attr("checked","checked"); $("li.p02").attr("class","p02on"); }, function(){ $("input.check02").removeAttr("checked"); $("li.p02on").attr("class","p02"); } ); $("input.check02").toggle( function(){ $("li.p02").attr("class","p02on"); }, function(){ $("li.p02on").attr("class","p02"); } ); }); ご教授お願いいたします。 また、ボタンが10個あるのですが、 このまま、複製していくのもどうかと思うんですが、 もっと簡単にまとめる方法などあるのでしょうか。 ご回答よろしくお願いいたします。

  • jQuery1.7.2でのdisabledの扱い方

    jQueryで質問させてください。 自分は、チェックボックスとテキストエリアを連動させて、 チェックボックスがチェックされると、disabledが設定されていたテキストエリアが入力可能になり、 チェックボックスのチェックが外されるとテキストエリアに入力不可になるようなものを作っていました。 jQuery1.4.4では以下のように書いて動いていました。 しかし、1.7.2にするとどちらも動かなくなりました。 1.7.2の場合はどのように記述すると以下と同じような動きになるのでしょうか? 宜しくお願いします。 $(document).ready(function() { $('#hogecheck').click(function(e) { if($('#hoge').attr('disabled') == true) { $('#hoge').attr('disabled', ''); } else { $('#hoge').attr('disabled', 'disabled'); } }) });

  • jquery・特定要素の選択について

    jqueryを独学で色々と勉強しているのですが、すこし疑問があるので教えてください。 以下の様なソースで1つ目のTD要素内のINPUT(チェックボックス1・3)をチェックした際に、3つ目のTD要素内のINPUTを無効にしたいと考えています。 <table> <tr> <td><input type="checkbox">チェックボックス1</td> <td>hoge</td> <td><input type="checkbox">チェックボックス2</td> <tr> <tr> <td><input type="checkbox">チェックボックス3</td> <td>hoge</td> <td><input type="checkbox">チェックボックス4</td> <tr> </table> 私が書いたスクリプトは以下です。 $('td:first-child :checkbox').click(function(){  $( this ).parents().children('td:last-child').children('input').attr('disabled','disabled'); }); ・・一応これで正常に動くのですが、どうも書き方に無駄があるような気がします。 もっとスマートな方法があればアドバイスいただけないでしょうか? よろしくお願い致します。

  • シャドウボックスとjQueryを共存させるには

    シャドウボックス3.0.3を利用しています。 チェックボックスを複数選択するjQueryをシャドウボックス内で利用したいのですが、 シャドウボックスとjQueryがコンフリクトしてしまうようで、実現できません。 共存させるにはどのように記述を変えれば良いでしょうか? <head> <script type="text/javascript" src="../common/js/jquery-1.3.1.min.js"></script> <!-- シャドウボックス --> <script type="text/javascript" src="../common/js/shadowbox/shadowbox.js"></script> <link rel="stylesheet" type="text/css" href="../common/js/shadowbox/shadowbox.css"> <script type="text/javascript"> $(document).ready(function(){ Shadowbox.init(); }); </script> <!-- チェックボックスの複数選択 --> <script type="text/javascript"> $(function(){ $("#toggle").click(function(){ $('.chkbox').attr('checked', $(this).attr('checked')); }); }); </script> </head> <body> <a href="#inline" title="シャドウボックス" rel="shadowbox;width=900;height=1200">シャドウボックス</a> <div id="inline" style="display:none"> <input type="checkbox" id="toggle"> toggle<br> <br> <input class="chkbox" type="checkbox" name="ids[]" value="1"> 1<br> <input class="chkbox" type="checkbox" name="ids[]" value="2"> 2<br> <input class="chkbox" type="checkbox" name="ids[]" value="3"> 3<br> </div> </body>

  • jQueryでフォームの変更時、チェックする

    jQuery初心者です。 指定したクラス(例はclass_a)のフォームがchangeされた時に 指定したクラス(例はa_check)のチェックボックスをチェックするようにしたいのですが 上手くいきません。動作はするのですが、ページ読み込み時に勝手に checkedしてないのにチェックがONになります。どうすればいいでしょうか・・? 初期値の有無は関係無いみたいです <form method="get" action=""> <input type="checkbox" class="a_check" name="mode" value="1" >チェックボックス<br> <input type="text" size="30" class="class_a" name="input_a" value="">テキスト<br> </form> <script type="text/javascript"> $(".class_a").change(function () { $(".a_check").attr("checked", true); }).change(); </script> ご指南頂けたら幸いです。

  • jQueryのアニメーションについて

    jQueryのアニメーションについて聞きたいです。 チェックボックスと連動してボックスが表示されるアニメーションはわかりましたが、表示される際のアニメーションはどうすればいいかわかりません。 フロートで横並びになった一番・二番・三番の三つのボックスがあり、三番のみが表示されている場合、三番のボックスが一番左に表示されています。 そこで二番のチェックボックスにチェックをして、二番のボックスを表示ると、二番が左で三番がその右に表示されます。 その際、三番が右にずれるときにアニメーションでスライドできないでしょうか。 現在のソースです。 【CSS/Script】 <script type='text/javascript' src='http://code.jquery.com/jquery-1.7.1.js'></script> <style type='text/css'> input{margin:80px 0 0 80px;} div{ display:none; margin:25px; padding:25px; background:#eee; width:200px; height:150px; float:left; } </style> <script type='text/javascript'> $(window).load(function(){ $('#check1').click(function() { $("#box1").slideToggle(this.checked); }); $('#check2').click(function() { $("#box2").slideToggle(this.checked); }); $('#check3').click(function() { $("#box3").slideToggle(this.checked); }); }); </script> 【HTML】 <p> <label><input type="checkbox" id="check1">一番</label> <label><input type="checkbox" id="check2">二番</label> <label><input type="checkbox" id="check3">三番</label> </p> <div id="box1">一番を押してでるのです</div> <div id="box2">さては二番を押したから</div> <div id="box3">どれかと思えば三番でした</div> よろしくお願いいたします。

  • jQueryを使用したチェックボックス動作について

    現在、HTML作成におきまして、 チェックボックスのチェックによる、フォームの入力可・不可の設定をしたいと思っており、下記の様なソースをしようしております。 input type="text" において、1つのみであれば、上記の動作は可能ですが、 複数の場合、一つ目のみ有効(入力可・不可)になります。 複数を有効する方法はありますでしょうか。 <現在のソース> ========以下、script========= <script> $(function(){ $("div.ckbtnon input[type=checkbox]").change(function(){ $("div.ckbtnon input").next("input[type=text]").attr("disabled", "disabled").removeClass("bg_white").addClass("bg_disabled"); $(":checked").next("input[type=text]").removeAttr("disabled").removeClass("bg_disabled").addClass("bg_white"); }).trigger("change"); }); </script> ・ ・ ・ ========以下、HTML========= <div class="ckbtnon"> <label> <input type="checkbox" name="check" value="">CHECKTEST <input type="text" name="txt" value=""><!--1--> <input type="text" name="txt" value=""><!--2--> </label> </div> //ここまで HTML内の<input type="text" name="txt" value="">が2つ目の場合、効かない状態になります。 1つ目を含め複数のテキスト入力に可・不可を制御できますでしょうか。

  • AJAXで生成したHTMLでのチェックボックス一括チェックの方法を教えてください

    現在jqueryを使って、ajaxでチェックボックスを生成して、それに対して一括チェックボタンを付けたいと考えております。 <input name="allcheck" type="checkbox" id="checkall" checked="checked" />全て<br /> <input type="checkbox" name="carrier" value="docomo" checked="checked" />docomo<br /> <input type="checkbox" name="carrier" value="au" checked="checked" />au<br /> <input type="checkbox" name="carrier" value="softbank" checked="checked" />softbank<br /> というチェックボックスがajaxで生成されて function carrier_check() { $('#checkall').click(function(e){ $(':checkbox[type=checkbox][name=carrier]').attr('checked', $('#checkall').attr('checked')); }); } のjavascriptで上記のチェックボックスを一括チェックできるようにしようとしているのですが ajaxを使わずに上記のチェックボックスをHTMLに書いているときは一括チェックできるのですが、ajaxを使用して生成した場合にはチェックボックスの一括チェックができません。 どのようにすれば、ajaxで生成されたチェックボックスを一括チェックできるようになるのでしょうか? ご存知の方がいらっしゃいましたらご教授お願いいたします。

  • jquery、javascriptについて

    あるdivエリア内をクリックすると、特定のチェックボックスに チェックが入るということをしています。 (チェックボックスにチェックを入れるとdiv内の色が変わります。) つまり、divとチェックを連動させたいのです。 その部分は下記でできたんですが、 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <script src="js/jquery-1.2.6.min.js" type="text/javascript"></script> <script type="text/javascript"> $(function(){ $("div#first").mouseover(function() { $(this).css("cursor","pointer"); }).click(function(){ $("input.first").attr("checked","checked"); $("div#first").css("background-color","#FF0000"); }); $("input.first").click(function(){ $("div#first").css("background-color","#CCCCCC"); }); }); $(function(){ $("div#second").mouseover(function() { $(this).css("cursor","pointer"); }).click(function(){ $("input.second").attr("checked","checked"); $("div#second").css("background-color","#FF0000"); }); $("input.second").click(function(){ $("div#second").css("background-color","#CCCCCC"); }); }); </script> </head> <body> <div id="first" style="width:20px; height:20px; background-color:#CCCCCC" >1</div> <div id="second" style="width:20px; height:20px; background-color:#CCCCCC">2</div> <input class="first" name="test" type="checkbox" value="" /> <input class="second" name="test" type="checkbox" value="" /> </html> 全部で、その組み合わせを10箇所作りたいのですが、 function?を単純に10個複製すればできますが、 もっと簡単にまとめる方法はないのでしょうか? さらに贅沢をいうと、 <div>と<input>は上記では、first,secondのように、id,class名で あわせてますが、ポジションなどで連動できるともっといいです。 1番目のdivをクリックしたら、inputの一番目にチェックのようなことです。 そんなことができるのでしょうか? 具体的に教えていただけると幸いです。 よろしくお願いいたします。

  • jQueryによるチェックボックスの制御

    いつもお世話になっています。 只今jQueryを勉強中なのですがチェックボックスの制御が上手くできずに困っています。 <li>リスト1</li> <li>リスト2</li> <li>リスト3</li> <input type="checkbox" id="list1" name="example" value="">リスト1 <input type="checkbox" id="list2" name="example" value="">リスト2 <input type="checkbox" id="list3" name="example" value="">リスト3 リスト1をクリックした時はチェックボックス1にチェックが入り他のチェックが外れる リスト2をクリックした時はチェックボックス2にチェックが入り他のチェックが外れる この様な処理ができるようにしたいのですが jqueryでこちらを再現することができるのでしょうか? もしよろしければどなたかご教示ください。

    • ベストアンサー
    • AJAX

専門家に質問してみよう