前回に引き続いた質問になってしまいますが、
下記コードにて、テキストボックスが未入力で送信ボタンを押した場合、アラートが表示される様になります。
___________________________________________
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で作れるようになりたいと思い、再度投稿しました。
宜しくお願いします。
No.1ベストアンサー
- 回答日時:
テキストボックスの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;
}
などになりそうで。
No.3
- 回答日時:
入力必須要素には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>
No.2
- 回答日時:
<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>
回答頂きありがとうございます。
質問者自身が理解が追い付いていないので誠に恐縮ですが、また質問せて頂く機械がありましたらその時は何卒お願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- Visual Basic(VBA) Selenium Basicの件 5 2023/04/10 20:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォームが空欄の時にフォーム...
-
focus()が上手くいかない
-
別ウィンドウへのsubmitの挙動...
-
submitした値を返したい
-
formのsubmitイベントの発生に...
-
複数のフォームを一括で自動送...
-
ダウンロードボタンについて
-
chromeでフォームの値が取得で...
-
1つのページにformを2つ設置。2...
-
HTML?JavaScript? INPUTタグ...
-
javascriptでASPにデータを渡す
-
Javascriptに条件分布ついて(再)
-
submit後のフォームデータの書...
-
JavaScript動作仕様の変更!?
-
return trueとreturn falseの用...
-
value内に変数を入れたい
-
プルダウン 項目が多いので先頭...
-
【jQuery】input nameの文字列...
-
tableの任意行にfocusをあてる
-
select要素のvalueを配列で取得...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FormのonsubmitでJavaスクリプ...
-
submitした値を返したい
-
javascriptでASPにデータを渡す
-
1つのform内に2つのsubmitボタ...
-
別ウィンドウへのsubmitの挙動...
-
複数のフォームを一括で自動送...
-
POST時に要素を削除してからPOST
-
iframe内のformをサブミットす...
-
focus()が上手くいかない
-
1つのページにformを2つ設置。2...
-
添付ファイルの未選択チェック方法
-
Chromeの document.getElementB...
-
1つのformで複数のactionをボタ...
-
C# 配列などの受け渡し
-
ENTERキーを無効にしたいのです...
-
フォームが空欄の時にフォーム...
-
別窓ウィンドウから親ウィンド...
-
submitボタン押下後、disabled...
-
Javascript IEで「識別子があり...
-
迅速なご回答ありがとうござい...
おすすめ情報