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

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

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

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

JavaScript

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

Q&A

2回答

3458閲覧

チェックボックスがチェックされると、ボタンがアクティブになる仕掛けについて

pr_777

総合スコア20

HTML5

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

JavaScript

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

0グッド

0クリップ

投稿2020/05/16 21:43

編集2020/05/16 23:04

2つのチェックボックスのいずれかがチェックされると同時に
2つの送信ボタンが赤色に変化するという仕掛けを作っています。

チェックボタンは正しく機能するのですが、
送信ボタンがactive状態になったまま変化してくれません。
どのようにすれば制御ができるのでしょうか?

HTML

1<label> 2 <input id="check" 3 type="checkbox" 4 name="check" 5 class="checkbox"> 6 <span class="checkbox-icon"></span></label>お手続きの前に<a class="checkbox_link" 7 href="description.html" 8 target="_blank">重要事項説明</a>をお読みください。 <input id="submit" 9 class="submit" 10 type="submit" 11 name="submit" 12 value="手続きを進める">

上記HTMLコードは2点ございます。

javascript

1 const check = $("input[type='checkbox']"); 2 $('.submit').prop('disabled', true); 3 const active = $('.submit').prop('disabled', true); 4 let tf = false; 5 check.on('change', function () { 6 if (active) { 7 $('.submit').css('background-color', '#E83827').disabled = false; 8 check.prop('checked', (tf = !tf)); 9 return false; 10 } else { 11 $('.submit').css('background-color', '#a5a5a5').disabled = true; 12 check.prop('checked', (tf = tf)); 13 return true; 14 }

ご確認の程、お願い致します。

※補足

javascript

1$(function () { 2 const check = $("input[type='checkbox']"); 3 let tf = false; 4 check.on('change', function () { 5 var active = $('.submit').prop('disabled', true); 6 if (active) { 7 $('.submit').css('background-color', '#E83827').prop('disabled', false); 8 check.prop('checked', (tf = !tf)); 9 return false; 10 } else { 11 $('.submit').css('background-color', '#a5a5a5').prop('disabled', true); 12 check.prop('checked', (tf = tf)); 13 return true; 14 } 15 });

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

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

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

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

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

guest

回答2

0

送信ボタンがactive状態になったまま変化してくれません。

MDN Input 属性

どのようにすれば制御ができるのでしょうか?

スタイルによる装飾は置いておき(HTML/CSSを理解していれば後からどうにでもできるはずです)、
JavaScriptによるイベント発生順やDOM操作に集中して実装します。

  1. 2つの input[type=submit] を初期化(disabled にして、送信させない)。
  2. 2つの input[type=checkbox] に change イベントを定義

リスナの処理は、input[type=checkbox]が両方チェックされている場合に、2つの input[type=submit]からdisabled を外す(装飾変更のタイミング)。

pure javascript ですが、動くサンプルです。

上記HTMLコードは2点ございます

input#id が重複しないように確認が必要です。
(サンプルでは check1check2 に変えています)

投稿2020/05/16 23:21

AkitoshiManabe

総合スコア5434

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

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

0

changeイベント前にactive変数に値を保持してそのままのため、ずっとactiveの値は変わりません(しかもconstなので上書き不可)

投稿2020/05/16 22:01

m.ts10806

総合スコア80875

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

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

pr_777

2020/05/16 22:35

ご回答いただきありがとうございます。 changeイベント前にあった変数宣言をイベント内に記述してconstからletに変えましたが、 特に変化はございませんでした。
m.ts10806

2020/05/16 22:38

こちらが意図した内容になっているか分かりませんので、追記してください。 あと、そこからヒントを得て自身でも工夫してみてください。
m.ts10806

2020/05/16 22:39

prop('disabled', true) だとdisabledを入れてるだけですからね。 単に中に入れただけだとクリックするたびにdisabledにします。
m.ts10806

2020/05/16 23:00

もう1つヒントだと active = $('.submit').prop('disabled', true); これはprop('disabled',true)の実行結果の正否を保持しているだけでボタンの状態は取得していません。 初期値disabledしたいのでしたらボタンに直接書いておくのが良いのでは。
pr_777

2020/05/16 23:15

上記補足にてコードを追記しました。 また、submitボタンには直接disabledの記述をしました。 現状だと、ボタンチェック時に送信ボタンの色も同時に赤色(アクティブ状態)になるところまでは実装ができたのですが、チェックボタンを外しても再び送信ボタンが'disabled'状態にならない状態のままです。 特にelse以降の処理が実行されないのですが、 こちらの質問の意図はうまく伝わっていましたでしょうか? 伝わっていなかったようでしたら、申し訳有りません。 var active = $('.submit').prop('disabled', true); に関しては、承知の上で記述しております。
m.ts10806

2020/05/16 23:17

「active」は「現在の状態」を取得してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問