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

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

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

Email(電子メール)とは、ネットワークを介してメッセージを送受信するシステム。インターネット上で利用するメールを、Emailと呼ぶ場合が多いです。 インターネットの普及に伴い、現在では一般的なサービスとなっています。文字の他にも、画像、音声、プログラムなどを送受信することが可能です。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

JavaScript

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

Q&A

解決済

2回答

676閲覧

disabledの制限と解除 Javascript formの記入連動

hitugi

総合スコア13

Email

Email(電子メール)とは、ネットワークを介してメッセージを送受信するシステム。インターネット上で利用するメールを、Emailと呼ぶ場合が多いです。 インターネットの普及に伴い、現在では一般的なサービスとなっています。文字の他にも、画像、音声、プログラムなどを送受信することが可能です。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

JavaScript

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

0グッド

0クリップ

投稿2022/09/27 01:10

主にJavascriptに関する質問です。

可動させたい内容として、
text、email、checkboxを、すべて記入(checkboxは1個チェックで可)すると、
送信の、disabledが解除される、といった内容です。

以下プログラミングですが、
どうにも目立つバグが2つあります。

1、一度記入やチェックしたものを削除しても、disabled(送信無効)に戻らない。

2、順番的にcheckboxを先に選ぶと、text、email、を記入しても、disabledが解除されない。

バグ箇所の修正など、可動可能なJavascriptの解答のほど、よろしくお願いします。

<form action="" method="POST"> <input type="text" id="txt" name="aaa" required onchange="manage(this)" /> <input type="email" id="ama" name="email" required onchange="manage(this)"/><br> <label><input type="checkbox" name="sample[]" value="1" onchange="manage(this)">選択肢1</label><br> <label><input type="checkbox" name="sample[]" value="2" onchange="manage(this)">選択肢2</label><br> <label><input type="checkbox" name="sample[]" value="3" onchange="manage(this)">選択肢3</label><br> <label><input type="checkbox" name="sample[]" value="4" onchange="manage(this)">選択肢4</label><br> <input type="submit" id="sager" value="送信" disabled> <input type="reset" value="やめとく"></input><!--キャンセル可能--> </form> <script> function manage() { const txtJAB = document.getElementById('txt'); const amaJAB = document.getElementById('ama'); const submJAB = document.getElementById('sager'); const chareJAB = document.querySelectorAll('input[name="sample[]"]:checked'); if (txtJAB.value != '') if (amaJAB.value != '') if (chareJAB.length === 0) { submJAB.disabled = true; } else { submJAB.disabled = false; } } </script>

バグ2、画像
イメージ説明

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

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

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

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

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

guest

回答2

0

ベストアンサー

javascript

1<script> 2document.addEventListener('input', ()=>{ 3 let flg=txt.value=="" || 4 ama.value=="" || 5 !document.querySelector('[name="sample[]"]:checked'); 6 sager.disabled=flg; 7}); 8</script> 9<form action="" method="POST"> 10text:<input type="text" id="txt" name="aaa" required><br> 11email:<input type="email" id="ama" name="email" required><br> 12 13<label><input type="checkbox" name="sample[]" value="1">選択肢1</label><br> 14<label><input type="checkbox" name="sample[]" value="2">選択肢2</label><br> 15<label><input type="checkbox" name="sample[]" value="3">選択肢3</label><br> 16<label><input type="checkbox" name="sample[]" value="4">選択肢4</label><br> 17 18<input type="submit" id="sager" value="送信" disabled> 19<input type="reset" value="やめとく"></input><!--キャンセル可能--> 20</form> 21

投稿2022/09/27 01:41

編集2022/09/27 01:47
yambejp

総合スコア114843

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

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

hitugi

2022/09/27 02:07

毎度美しい解答、ありがとうございました。 可動できました。
guest

0

js

1 if (txtJAB.value != '') 2 if (amaJAB.value != '') 3 if (chareJAB.length === 0) { 4 submJAB.disabled = true;

ロジックがおかしいです。このコードを読むと「txtJABが記入済み かつ amaJABが記入済み かつ チェックボックスが未チェックなら、送信ボタンを無効化」「txtJABが記入済み かつ amaJABが記入済み かつ チェックボックスがチェック済みなら、送信ボタンを有効化」となっています。

js

1 if (txtJAB.value == '' || 2 amaJAB.value == '' || 3 chareJAB.length === 0) { 4 submJAB.disabled = true;

ではないでしょうか。


ついでに、required 属性が使われているので txtJAB と amaJAB を個別にチェックする必要はありません。if の部分は

js

1submJAB.disabled = !(document.querySelector('form').checkValidity() && 2 chareJAB.length > 0);

でよいでしょう。

投稿2022/09/27 01:19

編集2022/09/27 01:35
int32_t

総合スコア20884

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

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

yambejp

2022/09/27 01:47

送信ボタンの押下制御は視覚的な変更を伴うためrequiredによる送信制御とユーザビリティが異なり、requiredだから省いて良いものではないと思います。
hitugi

2022/09/27 01:49

解答ありがとうございます。 ただ、 if (txtJAB.value == '' || 〜〜 あまり挙動は変わってないですね... ifの部分の件に関して、こうでしょうか? if {submJAB.disabled = !(document.querySelector('form').checkValidity() && chareJAB.length > 0);}
int32_t

2022/09/27 01:55

yambejpさん、省くためのコードではありません。 hitugiさん、 > あまり挙動は変わってないですね... 挙動は変わるはずです。外側の2つのifは不要ですよ。 > ifの部分の件に関して、こうでしょうか? いいえ、この場合 if は不要です。「const chareJAB = ...」の後、そのコードだけでいいはずです。
hitugi

2022/09/27 02:20

ロジック、 || 論理和の説明など、ありがとうございました。 これからも勉強してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問