selectのoptionで、選択したときに色を付ける方法

こんにちは!大変お久しぶりでございます。
Giraffics Worksのクリエイティブディレクターのきりんと申します。
現在、Web講師もさせていただいております。

覚書も含めて投稿です。

メールフォームを作るときに使う、selectを使ったドロップダウンボックスですが、これに色をつけたい。と生徒さんから相談がありました。

<select id="mySelect">
  <option value="">選択して下さい</option>
  <option value="option1">Option 1</option>
  <option value="option2">Option 2</option>
  <option value="option3">Option 3</option>
</select>

このようなselectがあった場合、初期値の色を変えるという方法は、よく紹介されていたのですが、

初期値「選択してください」の色は灰色。
選択後は色を変更したい。

というお悩みでした。
selectといったフォーム系のコードは、どうしてもシステムに依存しているため、デザインの変更がcssだけでは完結できません。
optionの背景に色と、文字色の変更はcssで変更可能ですが、Macで反映してない気がするんですよね…。

ということで、こんなときどう変更するか、と言ったら、もうjavascript先生にお頼み申すしかありませんでした。

ただ、色をただ乗せるだけでは効果がなく…

//Macではうまく反映されなかったコード
$(document).ready(function(){
  $('#mySelect').change(function(){
    // すべてのoption要素のスタイルをリセット
    $(this).find('option').css('color', 'black');
    
    // 選択されたoptionの文字色を変更
    $(this).find('option:selected').css('color', 'red');
  });
});

これはだめなやつでした。
そもそも、初めも後も色が変わらなかったんです。

そこで、jQueryのウィジェットに目をつけました。
「data-display」です。

<select id="mySelect">
  <option data-display="選択してください" value="">選択してください</option>
  <option data-display="オプション1" value="1">オプション1</option>
  <option data-display="オプション2" value="2">オプション2</option>
</select>

optionに、data-displayを設定し、そこで判別して色を変えます。

document.addEventListener('DOMContentLoaded', function() {
    document.getElementById('mySelect').addEventListener('change', function() {
        var selectedOption = this.options[this.selectedIndex];
        var displayText = selectedOption.getAttribute('data-display');
        
        if (displayText === '選択してください') {
            // data-displayが選択してくださいのとき灰色
            this.style.color = 'grey';
        } else {
            // その他の色は赤色
            this.style.color = 'red';
        }
    });
});

選択されたoptionのdata-displayの属性を確認して、それに応じて色の変更をします。

うまく動きましたので、覚書でした。
他にもやり方いろいろあるんだろうな〜…。
もっと良いやり方等ありましたら、追記します。
また時間できたらこのページもサンプルページとか作りたいなって考えてます。


この記事が気に入ったらサポートをしてみませんか?