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

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

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

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

HTML5

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

JavaScript

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

3回答

2467閲覧

チェックボックスにチェックされたときのみボタンが押せるようにしたい

hello_whats_up

総合スコア57

CSS3

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

HTML5

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

JavaScript

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2019/09/25 12:21

わからないこと

フォーム画面を作成しており、チェックボックスにチェックされたときだけボタンを押せるようにしたいです。
下のコードのようにチェックボックスと登録ボタンを設置しています。
調べても良い方法をみつけれなかったのでどなたか教えて頂けないでしょうか。
(できればstateは使いたくないです)

       (省略)        <input id="check" type="checkbox" name="check" /><label>同意する</label> <button   type="submit" disabled={isSubmitting} > 登録 </button> (省略)

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

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

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

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

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

guest

回答3

0

HTML

1<input id="check" type="checkbox" name="check" onclick="hoge()"/> 2<label>同意する</label> 3<button id="but" type="submit" disabled={isSubmitting}>登録</button>

JavaScript

1function hoge() { 2 if(document.getElementById('check').checked == true) { 3 document.getElementById('but').disabled = false; 4 } else { 5 document.getElementById('but').disabled = true; 6 } 7}

こんな感じかな?
サンプル

投稿2019/09/25 12:43

編集2019/09/25 22:20
kyoya0819

総合スコア10429

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

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

hello_whats_up

2019/09/25 18:14

回答ありがとうございます。 実際に動くところ確認できました。 ちなみになのですが、Reactを使用しているので、できればjqueryは使いたくないのですが、別の方法はありますでしょうか。
kyoya0819

2019/09/25 22:04

あります というより記述を変更するだけですが 編集するので少々お待ちください。
hello_whats_up

2019/09/26 04:27

編集していただきありがとうございます!
guest

0

ベストアンサー

(できればstateは使いたくないです)

なぜですか?stateを使うのが一番シンプルだと思います。

jsx

1 2class YourClassName extends React.Component { 3 constructor(props) { 4 this.state = { 5 isAgreed: false, 6 } 7 } 8 9 onAgreementCheckboxChanged(newValue) { 10 this.setState({ isAgreed: newValue }) 11 } 12 13 render() { 14 return ( 15 <label> 16 <input 17 id="check" 18 type="checkbox" 19 name="check" 20 onClick={evt => { 21 this.onAgreementCheckboxChanged(evt.currentTarget.checked) 22 }} 23 /> 24 同意する 25 </label> 26 <button 27 type="submit" 28 disabled={isSubmitting || !this.state.isAgreed} 29 >登録</button> 30 ); 31 } 32}

Sep 27, 2019 12:03pm追記
ちなみに「なぜstateを使いたくないのか」聞いている意図ですが、
stateを使わないのが要件であったり、他Componentとの兼ね合いで管理が難しい(それはそれで設計に問題がある気がしますが)などの事情があるのであればstateを使わない手段を模索するのにも一理あると思います。もしそうではなくて、心理的にstateを使いたくないだけであれば、まったく合理的ではないので、ここをclearにしておかないと、現状のコードに対して、あるいは今後コードを生み出し続ける質問者にとって、何が必要なのか不明瞭なためです。

投稿2019/09/26 02:08

編集2019/09/27 03:06
thyda.eiqau

総合スコア2982

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

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

thyda.eiqau

2019/09/27 02:48

おっと、マイナス評価ついていることに気付いていませんでした。どこかコード上不備があるでしょうか?
hello_whats_up

2019/09/27 04:31

アドバイスありがとうございます。まだまだ知識不足のため、他のコンポーネントとの兼ね合いでstateを使いたくありませんでしたが、使えるように変更してうまくいきました。ありがとうございました。 あと、コードについてなのですが、constructorの中にsuper(props);を入れないといけないのでは..? (ちなみにマイナスは私ではありません笑)
thyda.eiqau

2019/09/27 04:37

ああ、そうですね、super(props)は必要です。Reactのプロジェクトからコピペできればよかったのですがあいにく回答した時点では手元に環境がなく、記憶で手打ちしたので漏れていました。失礼しました。 あとはbuttonのdisabledではなくformのactionイベントを拾う側でこのstateが「同意済みではない」ときにアラートを吐いてイベントリスナーから抜けるみたいなパターンでもいいと思いますが、action側のコードが不明だったのでこちらは回答からは省いています。参考になれば幸いです。 stateの管理が大変というのはたぶんstateで管理しているアイテムが多くてわけわからんみたいな状態だと思うのですが、適宜子Component化して、それぞれの子に必要なものをpropとして渡してあげるとコードがスリムになっていいと思います。分けすぎるとファイル数が膨大になって一長一短みたいな感じになりますが。
hello_whats_up

2019/09/27 05:05

丁寧なアドバイスありがとうございます。 参考にさせていただきます。
guest

0

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 document.querySelector('#check').addEventListener('change',e=>{ 4 document.querySelector('#submit').disabled=!e.target.checked; 5 }); 6}); 7</script> 8<label><input id="check" type="checkbox" name="check" />同意する</label> 9<button type="submit" id="submit" disabled>登録</button>

姑息なのでおすすめしませんがjsを利用せずにダミーを利用する方法

css

1<style> 2#check:not(:checked) ~ [type=submit]{display:none} 3#check:checked ~ [type=button]{display:none} 4</style> 5<input id="check" type="checkbox" name="check" /><label for="check">同意する</label> 6<button type="submit" >登録</button> 7<button type="button" disabled>登録</button>

投稿2019/09/26 01:10

yambejp

総合スコア114843

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問