現在、テキストエリアだけのフォームがあるのですが、それにラジオボタンとチェックボックスを加える予定です。
【やりたいこと】
・追加する予定のラジオボタンとチェックボックスは必須項目であるため、入力されていないときはエラーを出したい。
・エラーの出し方は、現在テキストエリアでの方法と同様にしたい。
【現在のコード】
HTML
<form id="hoge" name="hoge" method="post" action="hoge.php" onsubmit="return check()">
<input type="text" name="会社名" id="name" value="" />
<p id="namealert" class="errormsg">会社名が未入力です。</p>
JavaScript
function check() {
document.getElementById("namealert").style.display="none";
x=new Boolean(false);
x = false;
if(hoge.name.value == "") {
document.getElementById("namealert").style.display="block";
hoge.name.focus();
x = true;
}
if (x) {
return false;
}else return true;
}
ちなみに、追加予定のHTMLは以下です。
ラジオボタン
<input type="radio" name="hogehoge" id="hogehoge" value="選択肢A">選択肢A
チェックボックス
<input type="checkbox" name="hogehogehoge" id="hogehogehoge" value="選択肢B">選択肢B
以上、よろしくお願い致します。
こんな感じでどうでしょう。
HTML + CSS
<form id="hoge" name="hoge" method="post" action="hoge.php" onsubmit="return check()"> <input type="text" name="会社名" id="name" value="" /> <p id="namealert" class="errormsg">会社名が未入力です。</p> <br> <input type="radio" name="hogehoge" id="hogehoge1" value="選択肢A1">選択肢A1<br> <input type="radio" name="hogehoge" id="hogehoge2" value="選択肢A2">選択肢A2<br> <input type="radio" name="hogehoge" id="hogehoge3" value="選択肢A3">選択肢A3<br> <p id="radioalert" class="errormsg">選択肢Aが未入力です。</p> <br> <input type="checkbox" name="hogehogehoge1" id="hogehogehoge1" class="check_b" value="選択肢B1">選択肢B1<br> <input type="checkbox" name="hogehogehoge2" id="hogehogehoge2" class="check_b" value="選択肢B2">選択肢B2<br> <input type="checkbox" name="hogehogehoge3" id="hogehogehoge3" class="check_b" value="選択肢B3">選択肢B3<br> <p id="checkalert" class="errormsg">選択肢Bが未入力です。</p> <br> <input type="submit" value="Go"> </form> <style> .errormsg { display: none; } </style>
javascript
function check() { let form = document.getElementById("hoge"); let ok = true; let checked; // reset error message Array.from(form.querySelectorAll('.errormsg')).forEach(err => { err.style.display = "none"; }); // 会社名 if (form.name.value == "") { document.getElementById("namealert").style.display="block"; hoge.name.focus(); ok = false; } // 選択肢A (radio) checked = Array.from(form.querySelectorAll('[name="hogehoge"]')).find(e => e.checked); if (! checked) { document.getElementById("radioalert").style.display="block"; ok = false; } // 選択肢B (checkbox) checked = Array.from(form.querySelectorAll('.check_b')).find(e => e.checked); if (! checked) { document.getElementById("checkalert").style.display="block"; ok = false; } return ok; }
チェックボックスの方は、あるひとつのグループに複数の選択肢があって、最低でもどれかひとつを選ばなければいけない、というふうに解釈してます。
なので、name と id をユニークにして、「ひとつのグループに」という目印が欲しいので、上記では type="checkbox" に class="check_b" を指定しています。
あと、環境の指定がなかったのですが、今どきのブラウザを対象としています。