jQueryでチェックボックスの値を表示解除する方法

このQ&Aのポイント
  • この記事では、jQueryを使用してチェックボックスがチェックされたら値をテキストボックスに表示し、チェックが外れたら表示を解除するプログラムの作り方について説明します。
  • また、チェックボックスを全選択すると全てのチェックボックスの値を取得して表示する方法も紹介しますが、一部の問題が存在することを指摘します。
  • 最後に、この問題の解決策やヒントになるようなプログラムの実装方法についても解説します。
回答を見る
  • ベストアンサー

jquery inputのvalue値を表示解除

jqueryでチェックボックスがチェックされたらvalue値をテキストボックスに表示するプログラムです。 全選択をすると全チェックボックスにチェックが入り全てのvalue値を取得表示します。 [問題点] (1):まずどれかチェックボックスを選択しておきます。 (2):次に全選択を選択後、全選択を再び選択する(全解除)と(1)で選択した値がテキストボックスに残ってしまい、チェックが反転した形になってしまいます。 補足:チェックしたらvalue値を取得するのが正常なのですが、この問題点でチェックが外れたらvalue値を取得するに反転してしまう。 [求] 何かヒントになるようなプログラムを教えてもらえないでしょうか? もしくは原因を教えて下さい。 宜しくお願いします。 以下プログラム ========= $(function(){ //チェックボックス var check = $('input[name="check"]'); var check_flag = false; //全てを選択/解除 var checkall = $('input[name="checkall"]'); //テキストボックス var box = $('input[name="searchBox"]'); //テキストボックスのvalue値 var txt = box.val(); //チェック判定 $.each(check,function(i) { if ($(this).attr('checked')==true) { check_flag = true; return false; } }); //全て選択解除 checkall.change( function(){ //全てチェックする処理 $(this).parents('#check:eq(0)').find(':checkbox').attr('checked',this.checked); //配列生成 var arry = []; //チェックボックスのvalue値を格納 check.each( function(){ arry.push($(this).val()); }); //チェックボックスを一つずつ表示 var i=0; while( i < arry.length ){ //正規表現 var reg = new RegExp( arry[i] + ' ' ); //もしフラグがtrueで且つ //クリックした箇所のvalue値と一致するテキストがボックス内に表示されていたら if( !check_flag && txt.match( reg ) ){ //ボックス内のvalue値削除 txt = txt.replace( reg,'' ); }else{ //それ以外ならクリックした箇所のvalue値+スペースを代入 txt += arry[i] + ' '; } box.val(txt); i++; } }); //各項目チェック check.change(function(){ //クリックした箇所のvalue値取得 var data = $(this).val(); //正規表現 var reg = new RegExp( data + ' ' ); //もしフラグがtrueで且つ //クリックした箇所のvalue値と一致するテキストがボックス内に表示されていたら if( !check_flag && txt.match( reg ) ){ //ボックス内のvalue値削除 txt = txt.replace( reg,'' ); }else{ //それ以外ならクリックした箇所のvalue値+スペースを代入 txt += data + ' '; } //結果を表示 box.val( txt ); }); });

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

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

動作が正しいかわかりませんが、、、 $(function(){ var checks = $('input[name="check"]'), checkall = $('input[name="checkall"]'), textbox = $('input[name="searchBox"]'), copy_checkbox_to_textbox = function(){ var result = ""; checks.each(function(){ if($(this).attr('checked'))result += $(this).val() + ' '; }); textbox.val(result); }, clear_textbox = function(){ textbox.val(""); }; checkall.change(function(){ if($(this).attr('checked')){ checks.attr('checked', true); copy_checkbox_to_textbox(); }else{ checks.attr('checked', false); clear_textbox(); } }); checks.change(function(){ copy_checkbox_to_textbox(); }); });

kiddman777
質問者

お礼

完璧です!コードを参考に解析したいと思います!

関連するQ&A

  • jquery フォームの値をテキストに表示非表示

    var check = $('input[name="check"]');//チェックボックス var box = $('#searchBox');//検索ボックス var chk = $('#che input:checkbox'); check.change(function(){   //チェック判定   if( $(chk+':checked').length > 0 ){   var data = $(this).val();   box.append( data +" " );   }else{   box.text("");   } }); =========================================== 1:チェック判定で任意のチェックボックスにチェックが入ってるいるかを判定を行いテキストエリアにスペース区切りでチェックボックスのvalue値を取得表示。 2:任意のチェックボックスからチェックが外されたら、テキストエリアにあるテキストと任意のチェックボックスのvalue値と一致するテキストエリアから削除。 3:チェックボックスが全て外れたらテキストエリアの内容を削除。 以上のことをやりたいのですが、どうしても項目2が出来ません。 参考の記事もしくは対処法をご教授下さい。

  • 教えてください!

    セレクトボックスが3つあります。 1つめのセレクトボックスがid=select1 2つめのセレクトボックスがid=select2 3つめのセレクトボックスがid=select3 valueはそれぞれ異なりますが0~3か0~5といった具合です。 全てのセレクトボックスのうち1つでもvalueが0(未選択)のものがあれば処理を中止し そうでなければ何か処理をするという分岐がしたいのですがうまくいきません。 具体的には、全てのセレクトボックスのvalueを0以外にしても$(this).val() == "0"がtrueに なってしまいます。どのようにすれば分岐できますでしょうか? ソースは以下の通りです。 $(function() { var cnt = 4; var status = false; for (var i = 1; i < cnt; i++) { $("select#item" + i).change(function() { var str = ""; $("select option:selected").each(function() { status = true; if ($(this).val() == "0") { status = false; $(".res").html('値に0がある'); } str += $(this).val(); }); }); } if (status) { //全てのセレクトボックスでvalueが0でなければ何かする alert(str); } });

  • jQueryを使ってランダムに表示

    jQueryを使って5つのボックス要素を、ランダムに3つ表示させています。 現在はページを読み込むたびに表示を切り替えていますが、これを「一定時間で表示を切り替え」に変更する事は可能でしょうか? できればjsのみの修正でできれば良いのですが…。 どなたかお助けください。よろしくお願いいたします。 jsとhtmlは以下のようにしています。 jQuery(function($) { $.fn.extend({ randomdisplay : function(num) { return this.each(function() { var chn = $(this).children().hide().length; for(var i = 0; i < num && i < chn; i++) { var r = parseInt(Math.random() * (chn - i)) + i; $(this).children().eq(r).show().prependTo($(this)); } }); } }); $(function(){ $("[randomdisplay]").each(function() { $(this).randomdisplay($(this).attr("randomdisplay")); }); }); }); <div randomdisplay="3"> <div id="box">ランダム1</div> <div id="box">ランダム2</div> <div id="box">ランダム3</div> <div id="box">ランダム4</div> <div id="box">ランダム5</div> </div>

  • チェックボックスの選択チェック

    ラジオボタンの選択チェック、セレクトボタンの選択チェックのあとにチェックボックスの選択チェックをしたいのですが、どのように入れればよいのでしょうか。教えてください。 ↓参考までに↓ function check() { var flag=0; if( document.form1.seibetu.length){ flag=1; var i; for(i=0; i<document.form1.seibetu.length; i++) if(document.form1.seibetu[i].checked)flag=false; } if(flag){ alert('性別が選択されていません'); return false; } if(document.form1.nenrei.value=="")flag=true; if(flag){ alert('年齢が選択されていません'); return false; } if( document.form1.Q1.length){ flag=1; var i; for(var i=0; i<document.form1.Q1.length; i++) if(document.form1.Q1[i].checked)flag=false; if(flag){ alert('Q1が選択されていません'); return false; } else {★★★ここに入れたい★★★   ;} } }

  • セレクトボックスに"value"と"word"を付け加えたい。

    初めての投稿をさせてもらいます。JavaScript初心者な者で解る方がいらっしゃればご教授のほど宜しくお願いします。 質問させてもらいたい事はこちらのソースに"value"と"word"を付け加えることは出来ますでしょうか? 外部ファイルには /** * 選択肢クラス * @param parentValue 親の値(null:いつでも表示) * @param text 表示テキスト * @param value 値 * @param style CSS(省略可) */ function SelectOption(parentValue, text, value, style) { this.parentValue = parentValue; this.setOption = function() { this.text = text; this.value = value; if(style) { this.style.cssText = style; } }; return this; } /** * セレクトボックスクラス * @param id セレクトボックスID */ function SelectBox(id) { /** * IDに対応オブジェクトを取得 * @return オブジェクトorNULL */ function getObject() { var obj = document.getElementById(id); if(!obj.options && ( (typeof obj.length) == "number") ) { if(obj.length > 0) { obj = obj[0]; } else { obj = null; } } return obj; } // オプションのリスト var options = []; /** * オプション登録 * @param condition 表示条件 */ this.registOption = function(option) { options[options.length] = option; }; // 子のオブジェクト var child = null; /** * 子のオブジェクトを設定する * @param childObj 子のオブジェクト */ this.setChild = function(childObj) { child = childObj; }; /** * オプション反映 * @param parentValue 親の値(null:全部表示) * ※比較に==を使っているのでundefinedもnullと等しく扱われる。 */ this.make = function(parentValue) { var obj = getObject(); if(obj) { // 選択肢削除 obj.options.length = 0; // 表示すべき選択肢抽出 var opt = (parentValue != null) ? [] : options; if(parentValue != null) { for(var i = 0; i < options.length; i++) { if( (options[i].parentValue == null) || (options[i].parentValue == parentValue) ) { opt[opt.length] = options[i]; } } } // 選択肢反映 obj.options.length = opt.length; for(var i = 0; i < opt.length; i++) { opt[i].setOption.call(obj.options[i]); } // 子のオブジェクトにも連鎖反映 if(child) { child.make(obj.value); } } }; return this; } HTMLファイルには <html> <head> <title>セレクトボックス親子関係</title> <script type="text/javascript" src="Select.js" charset="Shift_JIS"></script> <script type="text/javascript"><!-- var box1 = new SelectBox("sb1"); box1.registOption(new SelectOption(null, "都道府県", "0", "color:gray;")); box1.registOption(new SelectOption(null, "東京都" , "1")); box1.registOption(new SelectOption(null, "神奈川県", "2")); var box2 = new SelectBox("sb2"); box2.registOption(new SelectOption(null, "区市町村", "0", "color:gray;")); box2.registOption(new SelectOption("1" , "千代田区", "1")); box2.registOption(new SelectOption("1" , "中央区" , "2")); box2.registOption(new SelectOption("2" , "横浜市" , "3")); box2.registOption(new SelectOption("2" , "川崎市" , "4")); var box3 = new SelectBox("sb3"); box3.registOption(new SelectOption(null, "詳細" , "0", "color:gray;")); box3.registOption(new SelectOption("1" , "一番町" , "1")); box3.registOption(new SelectOption("3" , "みなとみらい", "2")); box1.setChild(box2); box2.setChild(box3); window.onload = function() { box1.make(null); }; //--></script> </head> <body> <form> <select id="sb1" onchange="box2.make(this.value);"></select> <select id="sb2" onchange="box3.make(this.value);"></select> <select id="sb3"></select> </form> </body> </html> となっております。

  • jqueryでの表示について

    jqueryを使用したjavascript上で、「変数 userId」を用意しました。 この後ろに英数記号をつけたものをuniqueid5としました。 var uniqueid5 = userId+'Qre3I'; 出来たこと $('input[name~="uniqueid5"]').val(uniqueid5); とし、 <input type="text" name="uniqueid5" value="" /> と記入したところ、テキストボックスの中に「userId(変数)+’Qre3I’」が無事表示されました。 出来なかったこと <script> document.write("<p>" + uniqueid5 + "</p>"); </script> としたのですが、何も表示されません。 どこが間違っているのかご指摘いただけませんでしょうか?

  • selectメニューによるチェックボックスの表示・非表示

    リストメニューで選択された項目がアクティブになるようなフォームを作成したいと考えています。 下記コードの上部チェックボックスがselectメニューになっているようなものです。 JavaScriotに関して未熟者ですので、どなたか参考になるご意見/回答を頂けませんでしょうか?宜しくお願いいたします。 <html> <head> <title></title> <script type="text/javascript"> <!-- // 制御用フラグ // 0なら対象グループは無効(disabled)、1以上なら有効 var FLAG = { 'A':0, 'B':0, 'C':0, 'E':0 }; // 初期化 window.onload = function(){ var controlList = document.getElementById('ctr_FLAG').getElementsByTagName('input'); for(var i=0;controlList[i];i++){ if(controlList[i].checked){ var nameList = controlList[i].value.split(/,/); for(var j=0;nameList[j];j++){ FLAG[ nameList[j] ]++; } } } for(var x in FLAG) { fchk2_sub(x); } } // チェックが変更されたら function fchk2(obj) { nameList = obj.value.split(/,/); for(var i=0;nameList[i];i++) { if(obj.checked) { FLAG[nameList[i]]++; } else { FLAG[nameList[i]]--; } fchk2_sub(nameList[i]); } } // disableの変更 function fchk2_sub(groupe_name,dsiabled_value){ var inputList = document.getElementById('gr_'+groupe_name).getElementsByTagName('input'); for(var i=0;inputList[i];i++) { inputList[i].disabled = FLAG[groupe_name]>0?false:true; } } //--> </script> </head> <body> <form name='form2' action='#'> <p id="ctr_FLAG"> <input type='checkbox' name='chk1' value='A' onclick='fchk2(this)' > Aをアクティブに<br> <input type='checkbox' name='chk1' value='A,B' onclick='fchk2(this);' > AとBをアクティブに<br> <input type='checkbox' name='chk1' value='A,B,C' onclick='fchk2(this);'> AとBとCをアクティブに<br> <input type='checkbox' name='chk12' value='A,B,C,E' onclick='fchk2(this);'> AとBとCとDをアクティブに</p> <p>=====================</p> <p id="gr_A"> <input type='checkbox' name='a1' value='1'> 選択肢A<br> <input type='checkbox' name='a2' value='1'> 選択肢A<br> <input type='checkbox' name='a3' value='1'> 選択肢A<br> </p> <p id="gr_B"> <input type='checkbox' name='b1' value='1'> 選択肢B<br> <input type='checkbox' name='b2' value='1'> 選択肢B<br> <input type='checkbox' name='b3' value='1'> 選択肢B<br> </p> <p id="gr_C"> <input type='checkbox' name='c1' value='1'> 選択肢C<br> <input type='checkbox' name='c2' value='1'> 選択肢C<br> <input type='checkbox' name='c3' value='1'> 選択肢C<br> </p> <p id="gr_E"> <input type='checkbox' name='e1' value='1'> 選択肢E<br> <input type='checkbox' name='e2' value='1'> 選択肢E<br> <input type='checkbox' name='e3' value='1'> 選択肢E </p> </form> </body> </html>

  • htmlのformの表示について【Jquery】

    <script type="text/javascript" src="http://code.jquery.com/jquery-2.1.1.min.js"></script> <script type="text/javascript"> function formChanged(ev){ var sel = $('.chk:checked').map(function () { return this.checked ? this.value : null; }).get().join(); $("#output").text(sel); } formChanged(null); $(document).on("change",'.chk:checked',formChanged); </script> <form method="post" action="mail.php"> <table> <tr> <th>カテゴリー</th> <td> ・ABC: <input type="checkbox" name="カテゴリー[]" value="[abc]" class="chk" /> ・DEF: <input type="checkbox" name="カテゴリー[]" value="[def]" class="chk" /> ・GHI: <input type="checkbox" name="カテゴリー[]" value="[ghi]" class="chk" /> </tr> <tr> <th>選択した製品シリーズ</th> <td><span id="output"></span></td> </tr> <tr> </table> </form> これは、チェックボックスにチェックをいれたチェックボックスの値がリアルタイムに表示される仕組みなのですが、逆にチェックを外した場合は、値が消えません。消えるようにするにはどうしたらいいでしょうか。アドバイスをいただけると幸いです。

  • チェックボックスの表示・非表示 動作

    はじめまして。 初めて掲示板を利用させていただきます。javascriptを勉強しまだ日が浅いのでご存知の方がいらっしゃれば教えてください。 今、チェックボックスを選択し選択した項目がアクティブになるようにしたいのですが、選択項目が重複すると以下のようになってしまいました。 A+AB=AB A+AB+E=ABE 個々までは問題なし。 既に全てのチェックが付いた上体で、ABCE-A=BCE となってしまい、 ABのチェックが入っていても、Aが消えてしまいます。 以下に現在のコードを張ります。 <script type='text/javascript'> <!-- function fchk2(obj, name) { var frm=obj.form; if(obj.checked==true) { /* チェックボックスが選択されている場合は、   テキストボックスを有効化(false)*/ for(var i=1; i<=3; i++){ frm.elements[name+i].disabled=false; } } else { for(var i=1; i<=3; i++){ /* 無効化する前に、入力値をクリア */ if(name=='t'){ /* テキストボックスの場合 */ frm.elements[name+i].value=''; }else{ /* チェックボックスの場合 */ frm.elements[name+i].checked=false; } /* 無効化(true) */ frm.elements[name+i].disabled=true; } } } //--> </script> <form name='form2' action='#'> <input type='checkbox' name='chk1' value='1' onclick='fchk2(this,"t")' checked>A<br> <input type='checkbox' name='chk1' value='1' onclick='fchk2(this,"t");fchk2(this,"b");' checked>AとB<br> <input type='checkbox' name='chk1' value='1' onclick='fchk2(this,"t");fchk2(this,"e");' checked>AとE<br> <input type='checkbox' name='chk2' value='1' onclick='fchk2(this,"c");fchk2(this,"e");' checked>CとE<br> <br> A<input type='text' name='t1' value='テキストA'><br> A<input type='text' name='t2' value='テキストB'><br> A<input type='text' name='t3' value='テキストC'><br> <br> B<input type='text' name='b1' value='テキストA'><br> B<input type='text' name='b2' value='テキストB'><br> B<input type='text' name='b3' value='テキストC'><br> <br> <input type='checkbox' name='c1' value='1'> 選択肢C<br> <input type='checkbox' name='c2' value='1'> 選択肢C<br> <input type='checkbox' name='c3' value='1'> 選択肢C<br> <br> <input type='checkbox' name='e1' value='1'> 選択肢E<br> <input type='checkbox' name='e2' value='1'> 選択肢E<br> <input type='checkbox' name='e3' value='1'> 選択肢E </form> よろしくお願いいたします。

  • jqueryでクイズを作成

    jqueryでクイズを作っているのですが、下のプログラムのような問題を書く部分(問題1、問題2...)のところに改行などを用いた長い文章を書きたいのですがどのようにしたらよいでしょうか? // answers の先頭が正答になるようにして下さい。選択肢はシャッフルして表示されます。 var questions = [ {'question': '問題1', 'answers': ['富士山', '愛鷹山', '天保山', '八ヶ岳']}, {'question': '問題2', 'answers': ['バラ', 'チューリップ', 'タンポポ', '百合']}, {'question': '問題3', 'answers': ['あららぎ', 'せんじょうがはら', 'せんごく', 'かんばる']}, {'question': '問題4', 'answers': ['宇宙人', '異世界人', 'ドイツ人', '未来人']} ]; Array.prototype.shuffle = function() { var i = this.length; while(i){ var j = Math.floor(Math.random()*i); var t = this[--i]; this[i] = this[j]; this[j] = t; } return this; }; var answers = []; var current_question_number; $.each(questions, function (i, question) { question.true_answer = question.answers[0]; question.answers.shuffle(); }); $(function() { showQuestion(0); $('#answer_button').click(function () { var answer = -1; $.each($('#answers input'), function (i, value) { if ($(value).is(':checked')) { answer = i; return false; } }); if (answer == -1) { $('#warning').slideDown(); return false; } $('#warning').slideUp(); answers[current_question_number] = questions[current_question_number].answers[answer]; if (current_question_number < questions.length - 1) { showQuestion(current_question_number + 1); } else { showResult(); } }); }); function showQuestion(question_number) { current_question_number = question_number; var question = questions[question_number]; $('#question_number').text((question_number + 1) + "/" + questions.length); $('#question_body').text(question.question); $('#answers').empty(); $.each(question.answers, function (i, value) { $('#answers').append($('<li/>').append($('<input type="radio" name="answer" id="answer' + i + '"/>')).append($('<label for="answer' + i + '"/>').text(value))); }); } function showResult() { $('#question_view').hide(); $.each(questions, function (i, question) { var is_true = answers[i] === question.true_answer; $('#results').append($('<tr/>') .addClass(is_true ? 'true' : 'false') .append($('<th/>').text(i + 1)) .append($('<td/>').text(answers[i])) .append($('<td/>').text(question.true_answer)) .append($('<td/>').text(is_true ? '○' : '×')) ); }); $('#result_view').show(); }