質問: 下記のように、セレクトでdiv内の文字色を変更するフォームを作っています。 selectの選択はクッキー保存されるようになっており、最初に選択すると文字色が変化します。再度ページを訪れた際、selectは前回選択したものになっているものの、div内の文字色が変更されません。(別のoptionを一度選択してから、再選択すれば文字色も変わる) これを最初から選択されている状態で文字色が変わるようにするにはどうしたらよいでしょうか? ### HTML 色選択 赤 青 文字色を変更させたい文章 ### JS $(function(){ $("#color").on('change', function(){ if($(this).val() =="red"){ $("#comment").css("color","#ff0000"); } if($(this).val() =="blue"){ $("#comment").css("color","#0000ff"); } }); });
回答: ``` $(function() { // セレクトボックスが変更されたときにdivの文字色を変える処理 $("#color").on('change', function() { if ($(this).val() == "red") { $("#comment").css("color", "#ff0000"); } if ($(this).val() == "blue") { $("#comment").css("color", "#0000ff"); } }); }); ``` 現在auyaaさんが記述している処理は 「セレクトボックスが変更されたときにdivの文字色を変える処理」 だけです。 「セレクトボックスで今選択されている項目に合わせた色にdivの文字色を変える処理」 を最初(ページ表示時)に一回実行することで目的が達成できるかと思います。 今書かれてらっしゃるjavascriptの処理だけで実現可能(新たな記法、メソッド等は必要ない)ですので考えてみてください。 **----- 以下コメントを受けて追記 -----** 一番シンプルな方法としては、以下のようになるかと思います。 ``` $(function () { // 最初に「セレクトボックスが変更された時に行う処理」と全く同じ処理を行って文字色を変更する /* ここで$(this)を使うとhtml全体(厳密にはdocument要素)が取得されてしまうので 明示的に$("#color")と指定する*/ if ($("#color").val() == "red") { $("#comment").css("color", "#ff0000"); } if ($("#color").val() == "blue") { $("#comment").css("color", "#0000ff"); } // セレクトボックスが変更されたときにdivの文字色を変える処理 $("#color").on('change', function () { if ($(this).val() == "red") { $("#comment").css("color", "#ff0000"); } if ($(this).val() == "blue") { $("#comment").css("color", "#0000ff"); } }); }); ``` 同じ処理なので、関数にまとめて以下のようにしてもいいかもしれません。 ``` $(function () { // 最初に「セレクトボックスが変更された時に行う処理」と全く同じ処理を行って文字色を変更する /* ここで$(this)を使うとhtml全体(厳密にはdocument要素)が取得されてしまうので 明示的に$("#color")と指定する*/ setColor($("#color").val()); // セレクトボックスが変更されたときにdivの文字色を変える処理 $("#color").on('change', function () { setColor($(this).val()); }); }); function setColor(colorName) { if (colorName == "red") { $("#comment").css("color", "#ff0000"); } if (colorName == "blue") { $("#comment").css("color", "#0000ff"); } } ```