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

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

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

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

jQuery

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

Q&A

解決済

3回答

2713閲覧

Jqueryでbackground-colorを変更する

SugiuraY

総合スコア317

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2017/11/02 02:06

現在、
→ダブルリックした要素は
css('background-color','#bbbbbb')で据え置く

→hoverされた要素は
mouseenter時は
css('background-color','#abfeb6');
mouseleave時は
$(this).css('background-color','');

→ただしダブルクリックされた要素で#bbbbbbになっているものは
mouseenter時は
css('background-color','#abfeb6');
mouseleave時は
css('background-color','#bbbbbb');

としたいと考えております。
つまり、一度灰色(#bbbbbb)にしたものは、hoverされてポインタが載っている時は色が変わって欲しいけれども
ポインタが離れた時には無色になって欲しくない(灰色のままでいて欲しい)ということになります。

これについて、下記のコードで対応ができなかったのですが、
どこに問題があるのでしょうか。

ブラウザ環境:Chrome バージョン: 62.0.3202.75

Javascript

1<div class="elements">xxxxx<div> 2 3$(function(){ 4$('.elements').hover(function(){ 5 $(this).css('background-color','#abfeb6'); 6}, function() { 7 if ($(this).css("background-color")=="rgb(187,187,187)"||$(this).css("background-color")=="hex(#bbbbbb)") { 8 $(this).css('background-color', 'rgb(187,187,187)'); 9 }else{ 10 $(this).css('background-color',''); 11 } 12}); 13}); 14 15 16$(function(){ 17$('.elements').on('dblclick',function(){ 18 $(this).css('background-color','#bbbbbb'); 19}); 20

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

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

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

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

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

guest

回答3

0

色の変化についてはclassの付け替えとcssでやったほうが良いのでは?

CSS

1.elements:hover,.elements.gray:hover{ 2 background-color:#abfeb6; 3} 4.elements.gray{ 5 background-color:#bbbbbb; 6}

javacript

1$(function(){ 2 $('.elements').on('dblclick',function(){ 3 $(this).addClass('gray'); 4 }); 5});

HTML

1<div class="elements">xxxxx<div>

追記

.elements動的に作成して処理したいとのことなので以下修正版です

CSS

1/* 変更なし */ 2.elements:hover,.elements.gray:hover{ 3 background-color:#abfeb6; 4} 5.elements.gray{ 6 background-color:#bbbbbb; 7}
$(function(){ /* elements追加処理、適当なので状況にあわせて要修正 */ $('input[type=button][value=add]').on('click',function(){ $('#testarea').append($('<div>').addClass('elements').text('xxxxx')); }); /* dblclick処理はセレクタを修正 */ $(document).on('dblclick','.elements',function(){ $(this).addClass('gray'); }); });

HTML

1<!-- addボタンをおすと.elementsが#testareaに追加されます--> 2<input type="button" value="add"> 3<div id="testarea"> 4<div class="elements">xxxxx</div> 5</div>

投稿2017/11/02 02:30

編集2017/11/02 03:17
yambejp

総合スコア114829

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

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

SugiuraY

2017/11/02 02:55

コメントを頂き、有難うございます。 動的に生成された要素で既存のcssを適用させる方法が調べてもうまく動作させることができなかったため、そのあぷろーちはあきらめておりました。もう一度調べてみます。 もう一度調べてみます。
yambejp

2017/11/02 03:18

> 動的に生成された要素で既存のcssを適用させる方法 動的要素でも自動的にcssは反映されると思います 念のため動的処理を前提に修正版を追記しておきました
SugiuraY

2017/11/02 04:29

yambejp様 ご丁寧に有難うございます。 仰るとおり、問題なくCSSが反映されておりました。 動的に生成された場合反映されたのは他の点に問題があったからかと思いますので 個別に検証してみます。
guest

0

単純にこの記述だとif文のtrueに引っ掛かりません。

まずダブルクリックで色を#bbbbbbに変更しますね。
そしてhover時に色を#abfeb6に変更するのと同時に、ダブルクリックした時の#bbbbbbがいなくなります。
その後のfunction内if文突入時のbackground-colorは100%「#abfeb6」です。
なのでこのif文は100%false判定しかされません。

他の方法もありますが、このままの記述でやりたいのだとすれば、以下解決方法です。

$(function() {  var bgColor;  $('.elements').on('dblclick',function(){ $(this).css('background-color','#bbbbbb');   bgColor = $(this).css('background-color');  }); $('.elements').hover(function() { $(this).css('background-color','#abfeb6'); }, function() { if (bgColor == "rgb(187,187,187)" || $(this).css('background-color' == "hex(#bbbbbb)") { $(this).css('background-color', 'rgb(187,187,187)'); bgColor = $(this).css('background-color'); } else { $(this).css('background-color',''); bgColor = $(this).css('background-color'); } }); });

hoverして変更する前のbackground-colorを変数に残しておきます。
out時の戻す処理の際に、そのもともとの色を判定してあげれば良い思います。

投稿2017/11/02 02:37

編集2017/11/02 02:51
rnosh

総合スコア171

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

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

kei344

2017/11/02 02:43

bgColor がスコープをまたいで利用されているので、このままでは動きませんよ。
rnosh

2017/11/02 02:47

bgColorを外に出す必要がありますね・・・。 ご指摘ありがとうございます。
SugiuraY

2017/11/02 02:51

コメントを頂き、有難うございます。確かにhoverした瞬間に色が変わってしまっているので、判定ができない点と、それでは常にifの評価もfalseが返ってくることは理解できました。 一方で、それぞれのfunction(enter時とleave時)はローカルスコープのため、var bgColorを設定しても後の判定式でundefinedになるのではないでしょうか?
SugiuraY

2017/11/02 02:52

すみません、ちょうどコメントが重複してしまいました、ご放念下さい。
SugiuraY

2017/11/02 03:08

hover時の$(this).css('background-color')を取得したいので、外に出すことは可能なのでしょうか。。 せっかく教えて頂いたのに、方法が思いつかなかったため、コメントをさせていただきました。
guest

0

ベストアンサー

JavaScriptだけでやるならフラグをつけるとかする必要があります。
if ($(this).css("background-color")=="rgb(187,187,187)"||$(this).css("background-color")=="hex(#bbbbbb)") { この部分では必ず #abfeb6rgb(171, 254, 182) が返ってくるため判別できません。( rgb(187, 187, 187) で判別すればダブルクリック1回目は通りますが、2回目にダブルクリックしなければ消えます)

JavaScript

1$(function(){ 2 $('.elements').on('dblclick',function(){ 3 $(this).css('background-color','#bbbbbb'); 4 }); 5});

CSS

1.elements:hover { 2 background-color:#abfeb6 !important; 3} 4```**動くサンプル:**[https://jsfiddle.net/pwm45cpz/](https://jsfiddle.net/pwm45cpz/)

投稿2017/11/02 02:28

編集2017/11/02 02:36
kei344

総合スコア69407

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

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

SugiuraY

2017/11/02 03:11

コメント有難うございます。 無理にJSで複雑化させていました。 一番シンプルな方法で、解決することができました。また、CSSが不案内であまりimportantを気にしたことがなかったのですが、挙動が重複するときに優先順位をつけることができるのですね、この機会に勉強してみます! 宜しくお願い申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問