・チェックボックス未チェックのままsubmitボタンを押下した場合はエラー(javascript:alert)を表示し、投稿を中止
という条件をJavaScriptのみで処理したいんですが、アラート表示(ERROR5)の条件がうまく処理できません
else if (up.checked == true || de.checked == true)の箇所についてなんですが、下記の流れで処理されると解釈しています
・条件式は変数up又はdeがチェックされた場合はtrue、変数caはchk[] という name属性 を持つ要素を配列で取得、変数boxはチェックされたチェックボックスの数、for文中ではcaは配列なので、ループの中で 1つずつチェックされているか判定、更にif文中でcaがcb分チェックされていれば変数boxにcb分チェックされたcaを代入、もし変数boxが0に等しい場合にはERROR5を表示
・関数conditionの処理が全て行われるタイミングはフォームタグのreturn conditionで実行
という流れと考えましたが、いくら調べたり、アドバイスをいただいても改善しません
<html>
<head>
<meta charset="utf-8">
<script>
function condition() {
var ps = document.getElementById("r1");
var up = document.getElementById("r2");
var de = document.getElementById("r3");
if (ps.checked == true || up.checked == true) {
if (document.getElementById('name').value.length >= 10) {
window.alert("ERROR1");
return false;
} else if (document.getElementById('name').value == "") {
window.alert("ERROR2");
return false;
} else if (document.getElementById('comment').value.length >= 300) {
window.alert("ERROR3");
return false;
} else if (document.getElementById('comment').value == "") {
window.alert("ERROR4");
return false;
}
} else if (up.checked == true || de.checked == true) {
var ca = document.getElementsByName('chkid[]');
var box = "";
for(var cb = 0; cb < ca.length; cb++) {
if (ca[cb].checked) {
box = ca[cb];
}
}
if (box == 0) {
window.alert("ERROR5");
return false;
}
}
}
function change(obj) {
console.log(obj.id);
if (obj.id == "r1") {
document.getElementById("send").value = "投稿";
chkchange(true);
} else if (obj.id == "r2") {
document.getElementById("send").value = "更新";
chkchange(false);
} else if (obj.id == "r3") {
document.getElementById("send").value = "削除";
chkchange(false);
}
}
function chkchange(bool) {
chk = document.getElementsByName('chkid[]');
for(var box = 0; box < chk.length; box++) {
console.log(chk[box]);
console.log(box);
chk[box].disabled = bool;
}
}
</script>
</head>
<body>
<form method="post" action="" name="fn" onsubmit="return condition()">
<table>
<tr>
<td>
名前:<input type="text" name="name" id="name">
内容:<textarea name="comment" cols="30" rows="3" id="comment"></textarea>
<input type="radio" name="bbs" id="r1" value="post" onChange="change(this)">投稿
<input type="radio" name="bbs" id="r2" value="update" onChange="change(this)">更新
<input type="radio" name="bbs" id="r3" value="delete" onChange="change(this)">削除
<input type="submit" value="投稿" id="send">
</td>
</tr>
</table>
<?php
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
?>
<table>
<input type="checkbox" name="chkid[]" value="<?=$row['id'] ?>">
<tr>
<td>名前:
<?php echo $row['name'] ?>
</td>
</tr>
<tr>
<td>内容:
<?php echo $row['comment'] ?>
</td>
</tr>
</table>
<?php
}
mysqli_free_result($result);
mysqli_close($link);
?>
</form>
</body>
</html>
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+5
一行ずつコードを作ってもらってるように見えてきました。それはさておきコードのほうにコメントアウトでどんな動きをするか書いてみたらどうですか?自分自身も整理できるし、回答者の人にもどんな解釈をしてるか知らせることが出来るので、より的確なアドバイスがもらえると思います。自分でコードを作って理解してるならさほど時間もかからないはずです。それができないのであればこれはまだレベルが高いので、もう一回時間をかけてもっと簡単なところからやりましょう。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
こちらの質問で、Kosuke_Shibuyaさんが回答してくださっています。
ちゃんと読んで、そしてお礼を言いましょう。
https://teratail.com/questions/46751
回答してもらったコードを、コピペしても、問題は解決しません。
ちゃんとJavaScriptの基礎から勉強し、プログラムの内容を1行ずつ理解しましょう。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.19%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
2016/09/04 22:13
こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。