電子書籍の厳選無料作品が豊富!

前回に引き続いた質問になってしまいますが、

下記コードにて、テキストボックスが未入力で送信ボタンを押した場合、アラートが表示される様になります。
___________________________________________
HTML(一部抜粋):
<form action="#" method="POST" id="form">
<div class="question-form">
<div class="areas">
<div class="columns">会社名・団体名</div>
<div class="rows"><input type="text" name="test" id="input-2"><br>(例:**株式会社、**大学**学部**学科)</div>
</div>
<div class="columns-submit">内容をご確認の上、よろしければ下記ボタンをクリックして下さい。</div>
<div class="rows-submit"><input type="submit" name="sample" value="送信" class="input-text"></div>
<div class="submit-text">(上記ボタンを押した後、次の画面がでるまで、4~5秒かかりますので、続けて2回押さないようにお願いいたします。)</div>
</div>
</form>
___________________________________________
Javascript:
document.getElementById('form').onsubmit = function() {
let blank = document.getElementById('form').test.value;
if(blank === "") {
window.alert('入力されていません');
}
};
___________________________________________
ですが、これが下記の様にテキストボックスが2つ以上になると上手く分岐してくれず、入力をしてもアラートが表示されてしまいます。

<form action="#" method="POST" id="form">
<div class="question-form">
<div class="areas">
<div class="columns">会社名・団体名</div>
<div class="rows"><input type="text" name="test" id="input-2"><br>(例:**株式会社、**大学**学部**学科)</div>
</div>
   <div class="areas">
<div class="columns">氏名(漢字)<span class="red">(必須)</span></div>
<div class="rows"><input type="text" name="test" class="input-text"><br>例:明和太郎)</div>
</div>
<div class="columns-submit">内容をご確認の上、よろしければ下記ボタンをクリックして下さい。</div>
<div class="rows-submit"><input type="submit" name="sample" value="送信" class="input-text"></div>
<div class="submit-text">(上記ボタンを押した後、次の画面がでるまで、4~5秒かかりますので、続けて2回押さないようにお願いいたします。)</div>
___________________________________________

イメージとしてテキストボックスが両方、もしくはどちらかが未入力の場合にアラートを表示される様にしたいです。

テキストボックスが1つだと正しく動作するのに何故2つ以上だと動作しないのかわかりません。
テキストボックスが1つ増えるごとにname属性だけを変えて、上記のJabascriptを繰り返し記述する事になってしまうのでしょうか?

前回,HTMLのとある属性であっさり解決してしまいましたがJavascriptで作れるようになりたいと思い、再度投稿しました。

宜しくお願いします。

A 回答 (3件)

テキストボックスのnameが両方


testになってるなどで、
何か誤動作してせんか。
そのnameは、そうしておく
意図があるかもなので、そのままでも、いいので、


例えば、

let blank = document.getElementById('form').test.value;

の部分ですが、
form要素で判定するのでなく。

テキストボックスに指定してる
idでとるのはどうですか

input-text
input-2
のことです。

変数のblankというより
textValueなどのほうが、
意図に合うし、
2つあるから、1、2
と、番号打って
textValue1
textValue2

にするとか。
あと、
).test.value
は、
).value
にするとか。
name属性のtestは、
テキストボックスの入力値の
取得に使わないと、
考えると。

そうすると、

let textValue1 =
document.getElementById('input-text').value;

let textValue2 = document.getElementById('input-2').value;

と、別々に、
テキストボックスの値をとるので、
いずれかの一方でも
入力無しで、
アラートだしたかったら

if(textValue1 === "" || textValue2 === "") {
window.alert('入力されていません');
}

なんでしょうけど。

ところで、
アラート出力時、
onsubmitで、
submit自体をキャンセルするのに、
return false;
などいるんじゃなかったか。

覚えてない、何かキャンセルしてないと、アラート閉じたあと、
次のsubmit処理進むかもしれないです。
キャンセルが
return false;
だったか、覚えてないから
調べてくださいね。
それら、考慮したら、


if(textValue1 === "" || textValue2 === "") {
window.alert('入力されていません'); return false;
}
などになりそうで。
    • good
    • 0

入力必須要素にはrequiredをつけてください



<script>
window.addEventListener('DOMContentLoaded', ()=>{
var flg;
document.querySelector('[type=submit]').addEventListener('click',()=>{
flg=true;
});
document.querySelectorAll('[required]').forEach(x=>{
x.addEventListener('invalid',()=>{
if(flg){
alert('未入力項目があります');
}
flg=false;
});
});
});
</script>
<form>
<input type="text" name="test" id="input-2" required><br>
<input type="text" name="test" class="input-text" required><br>
<input type="submit" name="sample" value="送信" class="input-text">
</form>
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。
是非試してみたいと思いますのでまた何か質問する機会がありましたら是非宜しくお願い致します。

お礼日時:2020/09/21 18:15

<form action="#" method="POST" id="form">


  <p><input name="test">
  <p><input name="test">
  <p><input type="submit" value="送信">
 </form>

<script>

function check (event) {
 let
  form = event.target,
  elements = form.elements,
  test = elements['test'],
  val0 = test[0].value,
  val1 = test[1].value,
  rst = val0 + val1;

  // rst = [...form.querySelectorAll('input[name="test"]')].reduce((a,b)=>a.value+b.value);
 
 if ("" === rst) {
  event.preventDefault ();
  alert('入力されていません');
 }
 else {
  let submit = form.querySelector ('input[type="submit"]');
  submit.disabled = true;
 }
}

document.querySelector ('#form').addEventListener ('submit', check, false);


</script>
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。
質問者自身が理解が追い付いていないので誠に恐縮ですが、また質問せて頂く機械がありましたらその時は何卒お願い致します。

お礼日時:2020/09/21 18:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!