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

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

新規登録して質問してみよう
ただいま回答率
85.51%
JavaScript

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

Q&A

解決済

3回答

1830閲覧

JavaScriptで動作エラー

a-_.

総合スコア133

JavaScript

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

0グッド

0クリップ

投稿2016/08/29 05:58

編集2016/09/06 02:35

・ラジオボタン「投稿」がチェックされている状態の場合はチェックボックス非表示
・ラジオボタン「更新」「削除」がチェックされた場合のみチェックボックス表示
・チェックボックス未チェックのままsubmitボタンを押下した場合はエラー(javascript:alert)を表示し、投稿を中止
という条件をJavaScriptのみで処理したいんですが、各変数をif文で処理して「ERROR」を表示させる条件式を書いてみると、「投稿」「更新」はイメージ通りの動作をしてて、「削除」の時だけ
Notice: Undefined index: chkid
Warning: implode(): Invalid arguments passed
と表示されます
if (up.checked == true || de.checked == true)のコードで何も操作を行わなかった場合「ERROR5」と表示させるようにしたのに動かないのは何故でしょうか

HTML

1<html> 2 <head> 3 <meta charset="utf-8"> 4 <script> 5 function condition() { 6 var ps = document.getElementById("r1"); 7 var up = document.getElementById("r2"); 8 var de = document.getElementById("r3"); 9 if (ps.checked == true || up.checked == true) { 10 if (document.getElementById('name').value.length >= 10) { 11 window.alert("ERROR1"); 12 return false; 13 } else if (document.getElementById('name').value.length == "") { 14 window.alert("ERROR2"); 15 return false; 16 } else if (document.getElementById('comment').value.length >= 300) { 17 window.alert("ERROR3"); 18 return false; 19 } else if (document.getElementById('comment').value.length == "") { 20 window.alert("ERROR4"); 21 return false; 22 } 23 } 24 if (up.checked == true || de.checked == true) { 25 chk = document.getElementsByName('chkid[]'); 26 var v = 0; 27 for(b = 1; b <= chk.length; b++) { 28 obj = document.getElementByname("chkid[]" + b); 29 if (obj.checked == true) { 30 v++; 31 } 32 } 33 if (v == 0) { 34 alert ("ERROR5"); 35 return false; 36 } 37 } 38 } 39 function change(obj) { 40 console.log(obj.id); 41 if (obj.id == "r1") { 42 document.getElementById("send").value = "投稿"; 43 chkchange(true); 44 } else if (obj.id == "r2") { 45 document.getElementById("send").value = "更新"; 46 chkchange(false); 47 } else if (obj.id == "r3") { 48 document.getElementById("send").value = "削除"; 49 chkchange(false); 50 } 51 } 52 function chkchange(bool) { 53 chk = document.getElementsByName('chkid[]'); 54 var bchk = 0; 55 for(var box = 0; box < chk.length; box++) { 56 console.log(chk[box]); 57 console.log(box); 58 chk[box].disabled = bool; 59 } 60 } 61 </script> 62 </head> 63 <body> 64 <form method="post" action="" onsubmit="return condition()"> 65 <table> 66 <tr> 67 <td> 68 名前:<input type="text" name="name" id="name"> 69 内容:<textarea name="comment" cols="30" rows="3" id="comment"></textarea> 70 <input type="radio" name="bbs" id="r1" value="post" onchange="change(this)">投稿 71 <input type="radio" name="bbs" id="r2" value="update" onchange="change(this)">更新 72 <input type="radio" name="bbs" id="r3" value="delete" onchange="change(this)">削除 73 <input type="submit" value="投稿" id="send"> 74 </td> 75 </tr> 76 </table> 77 78<?php 79 while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { 80?> 81 82 <table> 83 <input type="checkbox" name="chkid[]" value="<?=$row['id'] ?>"> 84 <tr> 85 <td>名前: 86 <?php echo $row['name'] ?> 87 </td> 88 </tr> 89 <tr> 90 <td>内容: 91 <?php echo $row['comment'] ?> 92 </td> 93 </tr> 94 </table> 95 96<?php 97 } 98 mysqli_free_result($result); 99 100 mysqli_close($link); 101?> 102 103 </form> 104 </body> 105</html>

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

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

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

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

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

guest

回答3

0

ベストアンサー

そろそろいい加減なんでもかんでも全文載せるんじゃなくて
聞きたいところだけ絞る努力をしてください

今回の場合、bbsがdeleteであることとchkidが1つ以上である必要があるでしょう

HTML

1<form method="post"> 2<input type="radio" name="bbs" id="r3" value="delete" ">削除 3<input type="submit" value="go"> 41:<input type="checkbox" name="chkid[]" value="1"> 52:<input type="checkbox" name="chkid[]" value="2"> 63:<input type="checkbox" name="chkid[]" value="3"> 7</form>

PHP

1$bbs=filter_input(INPUT_POST,"bbs",FILTER_DEFAULT,["option"=>["default"=>""]]); 2$chkid=filter_input(INPUT_POST,"chkid",FILTER_DEFAULT,FILTER_REQUIRE_ARRAY)?:array(); 3 4if($bbs==="delete" and count($chkid)>0){ 5print implode(",",$chkid); 6}

投稿2016/08/29 06:19

yambejp

総合スコア114505

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

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

0

javascriptで「ERROR5」が表示されないのは、以下が誤っているからだと思います。
checkboxのループ処理は「chkchange」関数と同じに書き方にしてはどうでしょうか。

javascript

1if (up.checked == true || de.checked == true) { 2 chk = document.getElementsByName('chkid[]'); 3 var v = 0; 4 for(b = 1; b <= chk.length; b++) { 5 obj = document.getElementByname("chkid[]" + b); // ←ここがおかしい 6 if (obj.checked == true) { 7 v++; 8 } 9 } 10 if (v == 0) { 11 alert ("ERROR5"); 12 return false; 13 } 14}

投稿2016/08/29 06:38

attercop

総合スコア246

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

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

0

document.getElementsByName
document.getElementByname
コンソールにエラーになる
javascriptの開発中は何らかな開発ツールを見ながらやってください それは基本的なことです

投稿2016/08/29 06:30

date

総合スコア1820

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問