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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

checkbox

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

4137閲覧

【JavaScript】☑checkboxのオン・オフと連動した、送信ボタンの文字色変更

退会済みユーザー

退会済みユーザー

総合スコア0

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

checkbox

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

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

2クリップ

投稿2020/04/11 10:06

編集2020/04/11 11:18

前提・実現したいこと

□利用規約に同意する
にチェックを入れると「送信ボタン」が押せるフォームを作っています。

「送信ボタン」の文字色について、
□利用規約に同意する
が未チェックの時は白に、チェック済の時は黒にしたいです。
そこでif文で条件分岐させてcheckboxの文字色を変更しようとしたのですが、反映されませんでした。

HTML(該当部分)とJavascript(全文)のコードは以下の通りです。

原因や解決方法がわかる方、アドバイスをお願いします!

該当のソースコード

HTML

1<!--「利用規約に同意する」チェックボックス --> 2<input type="checkbox" name="agreement" value="1" class="checkbtn"> 3利用規約に同意します 4 5<!--送信ボタン --> 6<p class="buttons"><input type="submit" name="submit_btn" class="submit" value="送信"></p>

該当のソースコード

JavaScript

1/* 2「利用規約に同意する」をチェックした時に送信ボタンが押せるようになる。 3ページのロード後、フォームの送信ボタンを有効にし、 4「利用規約に同意する」チェックボックスにクリックイベントを設定する。 5*/ 6 7window.onload = mailformcheck; 8 9function mailformcheck() { 10 //送信ボタンを取得 11 var submitList = document.getElementsByName('submit_btn'); 12 var submit = submitList[0]; 13 14 //送信ボタンを無効にする 15 submit.disabled = ture; 16 17 //「同意します」チェックボックスを取得 18 var checkboxlist = document.getElementsByName('agreement'); 19 var checkbox = checkboxlist[0]; 20 21 //クリック時のイベントを設定 22 checkbox.onclick = toggleCheckbox; 23} 24 25//チェックボックスのクリックイベントを定義 26function toggleCheckbox() { 27 //送信ボタンを取得する 28 var submitList = document.getElementsByName('submit_btn'); 29 var submit = submitList[0]; 30 31 //チェックボックスがチェックされているか 32 var checked = this.checked; 33 34 35 if (checked === true) { 36 submit.disabled = false; 37 document.getElementsByName('submit_btn').style.color="black"; 38 } else { 39 submit.disabled = true; 40 document.getElementsByName('submit_btn').style.color="white"; 41 } 42} 43 44

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

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

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

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

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

m.ts10806

2020/04/11 11:04

>$('p').css('color'. 'white'); に変えても 上記だけ急にjQueryの記法が導入されてますが、jQueryを使われているなら記法は統一された方が良いかと思います。 アドバイスとしてはどちらで欲しいのでしょうか。
退会済みユーザー

退会済みユーザー

2020/04/11 11:15

JavaScriptで頂きたいです。 とりあえず動けばいいや!と思ってjQueryの記法も調べて混ぜてしまったのですが、 良くないことだったのですね…。失礼しました。 ご指摘の通り、わかりにくくなりそうなので >$('p').css('color'. 'white'); の部分は削除しておこうと思います。
m.ts10806

2020/04/11 11:23

統一した方がメンテナンスしやすいですからね。 (ただjQuery読み込ませてるなら使った方が・・・もったいないかなというのはある)
退会済みユーザー

退会済みユーザー

2020/04/11 11:38

なるほど。作って終わりではないですもんね! jQueryの方が短く書けるとは思うのですが、 今の理解度で全部jQueryに書き直すと自分が混乱しそうなので・・・。 JavaScript本を参考にして作っていることもあり、 まずJavaScriptのままで理解・実装したい!と思った次第でございます。
guest

回答1

0

ベストアンサー

反映されませんでした。

原因と思われるもの。

document.getElementsByName('submit_btn').style.color="black"; //getElementsByNameはElementListなので既にご自身でほかでやってるようにdocument.getElementsByName('submit_btn')[0]ってする必要があると思います。

ただ、コードがかなり冗長に思いました。
cssでstyle先に準備しておけばコード自体は簡潔に書けそうです。

最初から考えた方が早そうな気がしたので、ざっくり作り直してみました。
一応、シンプルには書いたつもりです。

ラベルの色だけ変えてもボタンは押せるので、属性の付け替えで対応します。

html

1<!--「利用規約に同意する」チェックボックス --> 2<label for="agreement"> 3 <input type="checkbox" name="agreement" id="agreement" value="1" class="checkbtn"> 4 利用規約に同意します 5</label> 6 7<!--送信ボタン --> 8<p class="buttons"><input type="submit" name="submit_btn" class="submit" id="submit" value="送信" disabled></p>

css

1 #submit{ 2 color:#000; 3 } 4 #submit:disabled{ 5 color:#fff; 6 }

js

1window.addEventListener('DOMContentLoaded', () => { 2 document.querySelector('#agreement').addEventListener('click', evt => { 3 let submit_button = document.querySelector('#submit'); 4 submit_button.disabled = true; 5 if (evt.currentTarget.checked) { 6 submit_button.disabled = false; 7 } 8 }); 9});

投稿2020/04/11 11:48

編集2020/04/11 12:09
m.ts10806

総合スコア80850

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

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

m.ts10806

2020/04/11 11:54

あ間違えた。ボタンの文字の色か。
退会済みユーザー

退会済みユーザー

2020/04/11 12:20

解決しただけでなく、コード量が半分以下に短くなって感動しました。 関数を使いこなせばここまで簡潔に書けるのですね。 素早く、しかも分かりやすく解答して下さってありがとうございます!
m.ts10806

2020/04/11 12:27

セレクタとか属性をどこまで把握しているか、そこをどう発想広げるかだと思います もちろん書ける範囲で書くのは分かりやすくていいのですけど、 使う言語の役割分担を考えるところからやってみると、簡潔なコードで求める結果が得られるように作れると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問