質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

350閲覧

チェックを解除した時に再びバリデーションを行う方法

penginer

総合スコア32

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2018/04/22 10:12

編集2018/04/24 08:14

前提・実現したいこと

HTMLでチェックボックス、プルダウンメニュー、ラジオボタン、テキストボックスを使ったフォーム(フォームタグで括られていない)を作り、
Javascriptを用いてバリデーションを行い、エラーがあれば.html()でそのメッセージを出力しようとしています。
出力するメッセージはhtmlのタグになっており、出力する場所はdiv要素とid属性で用意されています。
現時点ではエラーが発見されたらメッセージは表示され、解決されたら消えるようになっています。

発生している問題・エラーメッセージ

全てにおいて選択肢が変更された際に値は反映されますが
値がなくなった時「値が存在しません」と出ません。
これは、「正しい値を最初に入れた時はエラーメッセージは出ずid属性のあるdivタグのみが出力されるがその後仮に値が無くなった(チェックボックスの全てのチェック解除など)があった時に本来『何も入っていない』というエラーを出すべきなのに出ない」
という意味です。
また、可能な限り全てのIDについて記載することは避けたいと思っています。

該当のソースコード

js

1function valid($a) { 2 $error="<div id=\"a_valid\"></div>"; 3 if (!$a) { 4 $error = "<div id=\"a_valid\"><p style=\"color:#ff2800;\">"+"入力されていません。"+"</p></div>"; 5 }else if (($a != "a") && ($a != "b") && ($a != "c")) { 6 $error = "<div id=\"a_valid\"><p style=\"color:#ff2800;\">"+"不正なPOSTです。"+"</p></div>"; 7 } 8 return $error; 9} 10 11function valid_echo($a) 12{ 13 $a_echo =""; 14 $ans={"a":"A","b":"B","c":"C"}; 15 $error_message = valid($a); 16 if ($error_message==="<div id=\"a_valid\"></div>") { 17 $a_echo = $ans[$a]; 18 } 19 return $a_echo; 20 } 21 22function valid_b($b){ 23 $error_b="<div id=\"b_valid\"></div>"; 24 $b2 =[/*配列の中身*/]; 25 if ($b===[]) { 26 $error_b = "<div id=\"b_valid\"><p style=\"color:#ff2800;\">"+"入力されていません。"+"</p></div>"; 27 }else{ 28 for ($i = 0; $i <$b.length ; $i++) { 29 if (((parseInt($b[$i])<0||parseInt($b[$i])>($b2).length-1)||!Number.isInteger(parseInt($b[$i]))||!Array.isArray($b))&&parseInt($b[$i])==$b[$i]) { 30 $error_b = "<div id=\"b_valid\"><p style=\"color:#ff2800;\">"+"不正なPOSTです。"+"</p></div>"; 31 break; 32 } 33 } 34 } 35 return $error_b; 36} 37 38function valid_b_echo($b) 39{ 40 var $b_echo = ""; 41 $error_message = valid_b($b); 42 $b2 =[/*配列の中身*/]; 43 var $array= new Array(); 44 if ($error_message==="<div id=\"b_valid\"></div>") { 45 for(var i=0;i<$b.length;i++){ 46 if($b[i].checked){ 47 if($b_echo!=="") $b_echo+=","; 48 $b_echo+=$b2[parseInt($b[i].value)]; 49 } 50 }; 51 } 52 return $b_echo; 53} 54 55function valid_c($c) 56{ 57 $error_c="<div id=\"c_valid\"></div>"; 58 if ((!$c&&$c!=0)) { 59 $error_c = "<div id=\"c_valid\"><p style=\"color:#ff2800;\">"+"入力されていません。"+"</p></div>"; 60 } else if ((parseInt($c)<0||parseInt($c)>10)&&!Number.isInteger($c)) { 61 $error_c = "<div id=\"c_valid\"><p style=\"color:#ff2800;\">"+"不正なPOSTです。"+"</p></div>"; 62 } 63 return $error_c; 64} 65 66function valid_d($d) 67{ 68 $error_d="<div id=\"d_valid\"></div>"; 69 if ((!$d&&$d!=0)) { 70 $error_d = "<div id=\"d_valid\"><p style=\"color:#ff2800;\">"+"入力されていません。"+"</p></div>"; 71 } else if ((parseInt($d)<0||parseInt($d)>9)&&!Number.isInteger($d)) { 72 $error_d = "<div id=\"d_valid\"><p style=\"color:#ff2800;\">"+"不正なPOSTです。"+"</p></div>"; 73 } 74 return $error_d; 75} 76$(function(){ 77 $("#a input").change(function(){ 78 $gender=$("#a input:checked").val(); 79 $('div #a_valid').html(valid_a($a)); 80 $error_a_=valid_a($a); 81 $a_echo_=valid_a_echo($a); 82 //console.log(valid_gender($gender)); 83 //console.log(valid_gender_echo($gender)); 84 //console.log($gender); 85 //alert($gender); 86 }); 87 88 $("#b input").change(function(){ 89 ary=document.getElementsByName('b'); 90 var ary2=$('#b input:checked').map(function() { 91 return $(this).val(); 92 }).get(); 93 $b=new Array(); 94 if (ary.length>1) { 95 for (var i = 0; i <ary.length; i++) { 96 $b.push(ary[i]); 97 } 98 } 99 $error_b_=valid_b($b); 100 $b_echo_=valid_b_echo($b); 101 console.log(ary2); 102 $('div #b_valid').html(valid_b($b)); 103 console.log($error_b_); 104 console.log($b_echo_); 105 }); 106 107 $("#c").change(function(){ 108 $c=$("#c option:selected").val(); 109 $d=$("#d option:selected").val(); 110 $('div #c_valid').html(valid_c($c)); 111 $error_c_=valid_c($c); 112 //console.log(valid_c($c)); 113 //console.log($c); 114 }); 115 $("#d").change(function(){ 116 $c=$("#c option:selected").val(); 117 $d=$("#d option:selected").val(); 118 $('div #d_valid').html(valid_d($d)); 119 $error_d_=valid_d($d); 120 //console.log(valid_d($d)); 121 //console.log($d); 122 }); 123});

html

1<p> 2 <input type="radio" name="a" value="a" id="a"><label for="a">A</label> 3 <input type="radio" name="a" value="b" id="b"><label for="b">B</label> 4 <input type="radio" name="a" value="c" id="c"><label for="c">C</label> 5</p> 6</div> 7 8<div id="b_valid"></div> 9<div id="b"> 10<p> 11 <input type="checkbox" name="b" value="0" id="b0"><label for="b0">b0</label><br><br> 12 <input type="checkbox" name="b" value="1" id="b1"><label for="b1">b1</label><br><br> 13 <input type="checkbox" name="b" value="2" id="b2"><label for="b2">b2</label><br><br> 14 <input type="checkbox" name="b" value="3" id="b3"><label for="b3">b3</label><br><br> 15 <input type="checkbox" name="b" value="4" id="b4"><label for="b4">b4</label><br><br> 16 <input type="checkbox" name="b" value="5" id="b5"><label for="b5">b5</label><br><br> 17 <input type="checkbox" name="b" value="6" id="b6"><label for="b6">b6</label><br><br> 18 <input type="checkbox" name="b" value="7" id="b7"><label for="b7">b7</label><br><br> 19 <input type="checkbox" name="b" value="8" id="b8"><label for="b8">b8</label><br><br> 20 <input type="checkbox" name="b" value="9" id="b9"><label for="b9">b9</label><br><br> 21 <input type="checkbox" name="b" value="10" id="b10"><label for="b10">b10</label><br><br> 22 <input type="checkbox" name="b" value="11" id="b11"><label for="b11">b11</label><br><br> 23 <input type="checkbox" name="b" value="12" id="b12"><label for="b12">b12</label><br><br> 24 <input type="checkbox" name="b" value="13" id="b13"><label for="b13">b13</label><br><br> 25 <input type="checkbox" name="b" value="14" id="b14"><label for="b14">b14</label><br><br> 26 <input type="checkbox" name="b" value="15" id="b15"><label for="b15">b15</label><br><br> 27 <input type="checkbox" name="b" value="16" id="b16"><label for="b16">b16</label><br><br> 28 <input type="checkbox" name="b" value="17" id="b17"><label for="b17">b17</label><br><br> 29 <input type="checkbox" name="b" value="18" id="b18"><label for="b18">b18</label><br><br> 30 <input type="checkbox" name="b" value="19" id="b19"><label for="b19">b19</label><br><br> 31 <input type="checkbox" name="b" value="20" id="b20"><label for="b20">b20</label><br><br> 32 <input type="checkbox" name="b" value="21" id="b21"><label for="b21">b21</label><br><br> 33 <input type="checkbox" name="b" value="22" id="b22"><label for="b22">b22</label><br><br> 34</p> 35</div> 36<br><br> 37 38<div id="c_valid"></div> 39<div id="d_valid"></div> 40 41<p> 42 <select name="c" id="c"> 43 <option selected disabled></option> 44 <option value="0">0</option> 45 <option value="1">1</option> 46 <option value="2">2</option> 47 <option value="3">3</option> 48 <option value="4">4</option> 49 <option value="5">5</option> 50 <option value="6">6</option> 51 <option value="7">7</option> 52 <option value="8">8</option> 53 <option value="9">9</option> 54 <option value="10">10</option> 55 <option value="11">11</option> 56 </select> 57 <select name="d" id="d"> 58 <option selected disabled></option> 59 <option value="0">0</option> 60 <option value="1">1</option> 61 <option value="2">2</option> 62 <option value="3">3</option> 63 <option value="4">4</option> 64 <option value="5">5</option> 65 <option value="6">6</option> 66 <option value="7">7</option> 67 <option value="8">8</option> 68 <option value="9">9</option> 69 <option value="10">10</option> 70 </select></p>

補足情報(FW/ツールのバージョンなど)

フレームワークは不使用です

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

x_x

2018/04/24 08:00

提示コード中に「値が存在しません」がありませんが、どこで出力しようとしているのでしょうか?
penginer

2018/04/25 06:11

変更しました
guest

回答2

0

ベストアンサー

「本来『何も入っていない』というエラーを出すべき」とありますが、これは

js

1function valid_b($b){ 2 $error_b="<div id=\"b_valid\"></div>"; 3 $b2 =[/*配列の中身*/]; 4 if ($b===[]) { 5 $error_b = "<div id=\"b_valid\"><p style=\"color:#ff2800;\">"+"入力されていません。"+"</p></div>"; 6 }else{ 7//...

このifブロックに入らない、ということだと理解しました。

まず、$b===[]ですが、javascriptでは配列に比較演算子は使えません。たとえば、[] == []falseです。
解決法ですが、空配列かどうかは、lengthプロパティをチェックしてください。

また、このvalid_b関数の呼び出し部分を見ると、

js

1 $("#b input").change(function(){ 2 ary=document.getElementsByName('b'); 3 4 //... 5 6 $b=new Array(); 7 if (ary.length>1) { 8 for (var i = 0; i <ary.length; i++) { 9 $b.push(ary[i]); 10 } 11 } 12 $error_b_=valid_b($b); 13 14 //... 15 16 });

となっています。$bdocument.getElementsByName('b')を配列化したものですから、チェックボックスの状態に関わらず<input name="b">の全ての要素が入った配列です。
なので、$bが空配列になることはありません。
解決法ですが、jQueryを使っているようなので、ary=$('[name=b]:checked');のようにすればいいでしょう。

最後に、

js

1 $('div #b_valid').html(valid_b($b));

ですが、半角スペースの区切りは「子孫セレクタ」とみなされます。
子孫セレクタ-スタイルシートリファレンス
解決法ですが、セレクタは正しく書きましょう。

以上です。

投稿2018/05/02 09:26

Lhankor_Mhy

総合スコア36074

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

これってそれぞれの要素のエラーメッセージ表示のイベント発火タイミングってどうなってます?
POSTしようとしたときなんでしょうか?

.change()でフォーム項目の変更監視をしておけばよいのではないかと思いますが…。
http://kihon-no-ki.com/jquery-change-method-bind-form-tag

投稿2018/04/22 10:24

stampdoor

総合スコア483

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

penginer

2018/04/22 11:01

Javascriptのソースにミスが有ったので修正しました。 .change()は元からあります
stampdoor

2018/04/23 07:30

うーん、ちょっとどうしたいのかが分かりづらいような気がします。 valid_x_echoとかvalid_e_echoとかそもそもfunctionで定義していないものが出てきますし、 valid($a)とかだと$aなんかの変数に何が渡っていますか? functionとしてどこかで別途利用して呼び出すような処理を想定しているのでしょうか? ```javascript $("#hoge input").change(function(){ va error ='<div id="a_valid"></div>'; var val = $(this).val(); if( !val == 'fuga' ){ var error = '<div id="a_valid"><p style="color:#ff2800;">入力されていません。</p></div>'; }else if(val != 'a' && val != 'b' && val != 'C'){ var error = '<div id="a_valid"><p style="color:#ff2800;">不正なPOSTです。</p></div>'; } }); ``` みたいな感じで単純に要素の変更にイベント発火を合わせたほうが把握しやすいし、 コードもスッキリして良いと思います。 (上記ももうちょっとスッキリをかけると思います。) なにか意図があるようであればその旨を追記したほうが良さそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問