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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

HTML

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

Q&A

解決済

2回答

1870閲覧

JavaScript エラーの原因が分からない

a-_.

総合スコア133

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2016/09/02 00:59

編集2016/09/06 02:36

下記コードのelse if (up.checked == true || de.checked == true) の箇所に何やらエラーがある様なんですが、for文、if文、アラートをそれぞれ確認しても何がエラーなのか原因は把握できません

for文でboxにchkid[]を代入し、チェックボックスにチェックが入った場合はtrue、未チェックの場合は falseとしてアラート表示となるよう書いてみたんですが、こちらも動作確認できませんでした
if文の条件分岐に書き換え、更新と削除のラジオボタン、アラート表示、アラート表示の条件の処理を変更することで、アラート表示及びその条件の処理の元正しく動作されると推測しましたが、どの点に誤りがあるのでしょうか
因みにelse ifのコードを全て消して再度ブラウザ表示してみると指示通りの動作になるのを確認しました

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

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

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

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

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

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

date

2016/09/02 02:10

質問者さんはよくある程度質問したらまとめてベストアンサーを選んでいますが、質問が解決するたびに行ってください
guest

回答2

0

document.chkid[].elements[cb].checked

document.chkid[]という参照の仕方はありません。
ご自身でも書いている通り
chk = document.getElementsByName('chkid[]');
のようにして一度変数に受けた上で処理したほうがよいでしょう

#追記
とりあえず以下参考にしてください
ここまで書いて気がつきましたが、複数選択して削除はよいとして
複数選択して更新は仕様としてどうなんでしょう?

Javascript

1<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 2<script> 3$(function(){ 4 $('form[name=fn]').submit(function(e){ 5 if(!condition()){ 6 e.preventDefault(); 7 } 8 }); 9 $('input[name=bbs]').click(function(e){ 10 change($(this).prop('id')); 11 }); 12 change($('input[name=bbs]:checked').prop('id')); 13}); 14function condition() { 15 if($('#r1').prop('checked')||$('#r2').prop('checked')){ 16 with($('#name')){ 17 if(val().length >= 10) { 18 alert("ERROR1"); 19 return false; 20 } 21 if (val() === "") { 22 alert("ERROR2"); 23 return false; 24 } 25 } 26 with($('#comment')){ 27 if(val().length >= 300) { 28 alert("ERROR3"); 29 return false; 30 } 31 if (val() === "") { 32 alert("ERROR4"); 33 return false; 34 } 35 } 36 } 37 if($('#r2').prop('checked')||$('#r3').prop('checked')){ 38 if($('[name="chkid[]"]:checked').length==0){ 39 window.alert("ERROR5"); 40 return false; 41 } 42 } 43 return true; 44} 45function change(myid) { 46 var sendlist={ 47 "r1":{"text":"投稿",checkflg:true}, 48 "r2":{"text":"更新",checkflg:false}, 49 "r3":{"text":"削除",checkflg:false}, 50 }; 51 $('#send').val(sendlist[myid].text); 52 $('[name="chkid[]"]').prop('disabled',sendlist[myid].checkflg); 53} 54</script> 55

HTML

1<form method="post" name="fn"> 2名前:<input type="text" name="name" id="name"> 3内容:<textarea name="comment" cols="30" rows="3" id="comment"></textarea> 4<input type="radio" name="bbs" id="r1" value="post" checked>投稿 5<input type="radio" name="bbs" id="r2" value="update">更新 6<input type="radio" name="bbs" id="r3" value="delete">削除 7<input type="submit" value="投稿" id="send"> 8<table> 9<tr> 10<td><input type="checkbox" name="chkid[]" value="1"></td> 11<td>名前:name1</td> 12<td>内容:content1</td> 13</tr> 14<tr> 15<td><input type="checkbox" name="chkid[]" value="2"></td> 16<td>名前:name2</td> 17<td>内容:content2</td> 18</tr> 19<tr> 20<td><input type="checkbox" name="chkid[]" value="3"></td> 21<td>名前:name3</td> 22<td>内容:content3</td> 23</tr> 24</table> 25</form>

投稿2016/09/02 01:10

編集2016/09/02 02:23
yambejp

総合スコア114585

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

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

a-_.

2016/09/02 04:10 編集

ご回答ありがとうございます if文のchkid[]だった箇所をchkに訂正したらfunction chkchange(bool)のchk[box].disabled = bool;が動作するようになりました ですが、アラート表示の処理にまだ不備があるようです box = box + document.chk.elements[cb].value;のvalue値を変数boxに入れる 為に書いてるのに、そもそもこのvalueがどこのvalue値を指してるのかが定義されてない為にエラーが発生してると考えたんですが、考え方は合ってるんでしょうか
a-_.

2016/09/02 02:48

ご回答いただいた後で大変申し訳ないんですが、jQueryは扱っていないので分かりづらいです 更新を複数動作する時の処理に、現在のコードだと不備があるという事をおっしゃっているのでしょうか?
yambejp

2016/09/02 02:54

いや、複数の書き込みを更新するという自体があまりないということです。 更新というのはたいてい1件1葉でデータをあたえるものなので ラジオボタンで処理します。 ただ質問者さんが複数のデータをすべて同じ値に書き換えたいという 仕様を決めたのであればそれで構いません。
yambejp

2016/09/02 03:00

jQueryについては好き嫌いがあるので必ずしもおすすめしませんが 毎回トラブっている再帰処理あたりが驚くほど楽になりますので いずれ検討されるとよいでしょう
a-_.

2016/09/02 04:11 編集

複数のデータをすべて同じ値に書き換える仕様にしているので、その点に関しては違和感を感じてらっしゃるのかもしれませんが、そのままにしておきます すいません コメントの一部に誤りがありました 訂正いたしましたので、再度コメントにお答えいただければ幸いです
guest

0

ベストアンサー

前の質問が未解決のまま、同じ質問を出さないでください。
https://teratail.com/questions/46227

JavaScript

1if (document.chkid[].elements[cb].checked) { 2 box = box + document.chkid[].elements[cb].value; 3}

↑の部分、
ca でループをまわしてるので、ca で取得しましょう。
っていうか、すぐ下では

JavaScript

1console.log(chk[box]); 2

ってやっていますね。それと同じです。

投稿2016/09/02 01:27

jm1156

総合スコア866

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

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

a-_.

2016/09/02 04:06 編集

ご回答ありがとうございます if文のchkid[]だった箇所をcaに訂正したらfunction chkchange(bool)のchk[box].disabled = bool;が動作するようになりました ですが、アラート表示の処理にまだ不備があるようです box = box + document.ca.elements[cb].value;のvalue値を変数boxに入れる 為に書いてるのに、そもそもこのvalueがどこのvalue値を指してるのかが定義されてない為にエラーが発生してると考えたんですが、考え方は合ってるんでしょうか
jm1156

2016/09/02 02:33

document.chkid[].elements[cb]がどこからでてきたんですか…。 ループしているのはcaですから、ca をみればOKです。
a-_.

2016/09/02 04:09

すいません コメントの一部に誤りがありました 訂正いたしましたので、再度お答えいただければ幸いです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問