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

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

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

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

Q&A

解決済

3回答

6230閲覧

フォームで入力されたら色が変わる

退会済みユーザー

退会済みユーザー

総合スコア0

jQuery

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

0グッド

1クリップ

投稿2017/08/23 07:34

編集2017/08/23 07:42

フォームでセレクトが選択されてたら、色が変わるというのを下記で記載したのですが、複数selectがフォームの場合ですと、うまく挙動しません。
1つ選択するとページ内全てのselectの色がgreenに変わります
どなたか分かるかたいらっしゃいますでしょうか。

function hoge() { if($('select').prop("selectedIndex") == 0) { $('select').css({'color': 'red'}); } $('select').on('change', function(){ if($('select').prop("selectedIndex") == 0) { $('select').css({'color': 'red'}); } else { $('select').css({'color': 'green'}); } }); } hoge();

html

<select name="ccc" id="bbb" class="aaa"> <option value="">選択してください</option> <option value="">aaaa</option> <option value="">aaaa2</option> <option value="">aaaa3</option> </select> 誕生日 <select name="" id="bbb" class="aaa"> <option value="----">選択してください</option> <option value="1980">2017</option> <option value="1981">2016</option> </select> 年 <select name="ccc" id="bbb" class="aaa"> <option value="0">選択してください</option> <option value="1">1</option> <option value="2">2</option> </select> 月 <select name="ccc" id="bbb" class="aaa"> <option value="0">選択してください</option> <option value="1">1</option> </select> 日

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

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

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

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

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

m.ts10806

2017/08/23 07:36

念のためHTMLも追記願います。
退会済みユーザー

退会済みユーザー

2017/08/23 07:42

ありがとうございます。htmlもダミーで記載しました><
guest

回答3

0

ベストアンサー

select のみですと、ページ内全てのselectに影響を及ぼします。
影響させたい対象を絞り込むための記載が必要です。

対象のselectのみclassを与える

※classは何個与えてもOKなので対象用のクラスを別で用意しましょう

html

1<select name="hoge1" class="aaa hogehoge"> 2</select> 3<select name="hoge2" class="aaa"> 4</select> 5<select name="hoge3" class="aaa hogehoge"> 6</select>

javascript

1 //何回も書くと冗長になるので変数にしておく 2 var selecthoge = $('select.hogehoge'); 3 4 if(selecthoge.prop("selectedIndex") == 0) { 5 selecthoge.css({'color': 'red'}); 6 } 7 8 //対象全て一気に影響するパターン 9 selecthoge.on('change', function(){ 10 if(selecthoge.prop("selectedIndex") == 0) { 11 selecthoge.css({'color': 'red'}); 12 } else { 13 selecthoge.css({'color': 'green'}); 14 } 15 }); 16 17 //選択したものだけ影響させるパターン 18 selecthoge.on('change', function(){ 19 if($(this).prop("selectedIndex") == 0) { 20 $(this).css({'color': 'red'}); 21 } else { 22 $(this).css({'color': 'green'}); 23 } 24 });

対象のselectが1つしかない場合はIDを与える

html

1<select name="hoge1" id="hogehoge" class="aaa"> 2</select> 3<select name="hoge2" class="aaa"> 4</select> 5<select name="hoge3" class="aaa"> 6</select>

javascript

1 var selecthoge = $('#hogehoge'); //idはページ内に1つしかないのでselectは不要 2 3 if(selecthoge.prop("selectedIndex") == 0) { 4 selecthoge.css({'color': 'red'}); 5 } 6 7 selecthoge.on('change', function(){ 8 if(selecthoge.prop("selectedIndex") == 0) { 9 selecthoge.css({'color': 'red'}); 10 } else { 11 selecthoge.css({'color': 'green'}); 12 } 13 });

※対象が今は1つでも後に増える可能性があるのであればclassの方が良いです。

追記。
hoge()で実行していますが、このままだと「変更都度実行」が出来ないのではないかと思います。
関数にするのではなく、「HTML読み込み終了時に実行」としてはどうでしょうか。

例:

javascript

1$(function(){ 2 3 if($('select').prop("selectedIndex") == 0) { 4   ~~~処理 5 } 6 7 $('select').on('change', function(){ 8   ~~~処理 9 }); 10}); 11 12

投稿2017/08/23 07:43

編集2017/08/23 07:57
m.ts10806

総合スコア80850

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

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

退会済みユーザー

退会済みユーザー

2017/08/23 07:56

ありがとうございます。classで指定するとやはり変わってしまうので、idでそれぞれ指定し4つ同じ記述で書くことにしました。
m.ts10806

2017/08/23 07:59 編集

同じ記述を何個も書くのは少々無駄になります。メンテナンス性も損ねます。 classでもthisを利用することで「自身だけ」が可能なのでそのパターンの追記と、 気になる点があったので追記しました。そちらもご一読ください。
退会済みユーザー

退会済みユーザー

2017/08/23 08:06

素晴らしいです!なるほど!そういった書き方もあるんですね><勉強になります!本当にありがとうございました。
guest

0

$('select')の代わりに$(this)を使えばよいです。

……で終わりなんですが、要件によってはCSSだけでもできるかと思います。

required属性をつけ、未選択のvalueを空に

HTML

1<select name="" id="bbb" class="aaa" required="required"> 2<option value="">選択してください</option>

CSS

1select:required:valid { 2 color: green; 3} 4 5select:required:invalid { 6 color: red; 7}

擬似クラス
https://developer.mozilla.org/ja/docs/Web/CSS/:required
https://developer.mozilla.org/ja/docs/Web/CSS/:valid
https://developer.mozilla.org/ja/docs/Web/CSS/:invalid

投稿2017/08/23 08:00

x_x

総合スコア13749

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

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

退会済みユーザー

退会済みユーザー

2017/08/23 08:26

ありがとうございます>< こちらが特殊なものでしてrequiredの要素を付け加えることが出来ないのです。 説明不足で申し訳ありません。でもたすかりました。
guest

0

複数あるselectに同じidを振ってあるのがおかしいです。同じidが同一htmlの中に複数回出現してはいけません。
そのうえで、cssを変更は、selectに対してではなくそれぞれのidに対して行なえばいいでしょう。

投稿2017/08/23 07:49

KojiDoi

総合スコア13671

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

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

退会済みユーザー

退会済みユーザー

2017/08/23 07:55

すみません、ダミーのため同じidで記載していただけでした!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問