web-dev-qa-db-ja.com

マウスオーバーで背景色を変更し、マウスアウト後に削除する

クラスがforumであるテーブルがあります。私のjqueryコード:

_<script type="text/javascript">
    $(document).ready(function() {
        $('.forum').bind("mouseover", function(){
            var color  = $(this).css("background-color");

            $(this).css("background", "#380606");

            $(this).bind("mouseout", function(){
                $(this).css("background", color);
            })    
        })    
    })
</script>
_

それは完全に動作しますが、var color = $(this).css("background-color");なしでより効率的な方法で実行することは可能です。 mouseoutの直後に前の背景色を残して_#380606_を削除しますか?ありがとうございました。

27
good_evening

IE≤6を気にしない場合は、純粋なCSSを使用できます...

_.forum:hover { background-color: #380606; }
_
_.forum { color: white; }
.forum:hover { background-color: #380606 !important; }
/* we use !important here to override specificity. see http://stackoverflow.com/q/5805040/ */

#blue { background-color: blue; }_
_<meta charset=utf-8>

<p class="forum" style="background-color:red;">Red</p>
<p class="forum" style="background:green;">Green</p>
<p class="forum" id="blue">Blue</p>_

JQueryでは、通常、このスタイル用の特定のクラスを作成することをお勧めします。

_.forum_hover { background-color: #380606; }
_

そして、マウスオーバーでクラスを適用し、マウスアウトでクラスを削除します。

_$('.forum').hover(function(){$(this).toggleClass('forum_hover');});
_
_$(document).ready(function(){
  $('.forum').hover(function(){$(this).toggleClass('forum_hover');});
});_
_.forum_hover { background-color: #380606 !important; }

.forum { color: white; }
#blue { background-color: blue; }_
_<meta charset=utf-8>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<p class="forum" style="background-color:red;">Red</p>
<p class="forum" style="background:green;">Green</p>
<p class="forum" id="blue">Blue</p>_

クラスを変更してはならない場合、元の背景色を.data()に保存できます。

_  $('.forum').data('bgcolor', '#380606').hover(function(){
    var $this = $(this);
    var newBgc = $this.data('bgcolor');
    $this.data('bgcolor', $this.css('background-color')).css('background-color', newBgc);
  });
_
_$(document).ready(function(){
  $('.forum').data('bgcolor', '#380606').hover(function(){
    var $this = $(this);
    var newBgc = $this.data('bgcolor');
    $this.data('bgcolor', $this.css('background-color')).css('background-color', newBgc);
  });
});_
_.forum { color: white; }
#blue { background-color: blue; }_
_<meta charset=utf-8>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<p class="forum" style="background-color:red;">Red</p>
<p class="forum" style="background:green;">Green</p>
<p class="forum" id="blue">Blue</p>_

または

_  $('.forum').hover(
    function(){
      var $this = $(this);
      $this.data('bgcolor', $this.css('background-color')).css('background-color', '#380606');
    },
    function(){
      var $this = $(this);
      $this.css('background-color', $this.data('bgcolor'));
    }
  );   
_
_$(document).ready(function(){
  $('.forum').hover(
    function(){
      var $this = $(this);
      $this.data('bgcolor', $this.css('background-color')).css('background-color', '#380606');
    },
    function(){
      var $this = $(this);
      $this.css('background-color', $this.data('bgcolor'));
    }
  );    
});_
_.forum { color: white; }
#blue { background-color: blue; }_
_<meta charset=utf-8>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<p class="forum" style="background-color:red;">Red</p>
<p class="forum" style="background:green;">Green</p>
<p class="forum" id="blue">Blue</p>_
52
kennytm

CSSファイルで元の背景色を設定します。

.forum{
    background-color:#f0f;
}​

JQueryで元の色をキャプチャする必要はありません。 jQueryはスタイルをINLINEに変更するため、background-colorをnullに設定すると同じ結果が得られることに注意してください。

$(function() {
    $(".forum").hover(
    function() {
        $(this).css('background-color', '#ff0')
    }, function() {
        $(this).css('background-color', '')
    });
});​
19
Marc Uberstein

これを試して、その作業とシンプル

HTML

​​​​​​​​​​​​​​​​​​​​​<html>
<head></head>
<body>
    <div class="forum">
        test
    </div>
</body>
</html>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

Javascript

$(document).ready(function() {
    var colorOrig=$(".forum").css('background-color');
    $(".forum").hover(
    function() {
        //mouse over
        $(this).css('background', '#ff0')
    }, function() {
        //mouse out
        $(this).css('background', colorOrig)
    });
});​

css

.forum{
    background:#f0f;
}​

ライブデモ

http://jsfiddle.net/caBzg/

8
Pramendra Gupta

これは、CSSで直接設定する必要があります。

.forum {background-color: #123456}
.forum:hover {background-color: #380606}

IE6がリンクではない要素上でのホバーを受け入れないという事実が心配な場合、互換性のためにjQueryの hover イベントを使用できます。

3
Andrea

HTML:

<div id="id">
</div>
<div id="hiddenDiv" style="display:none;"></div>

jQuery:

$('#id').hover(function(){
    $("#hiddenDiv").css('display','block');
  },
  function(){
    $("#hiddenDiv").css('display','none');
  }
);
1
anuja

多くの苦労の末、ようやく機能するようになりました。(完全にテストされました)

以下の例は、既にクリックされたボタンの色を変更すべきではないという事実もサポートします。

JQueryコード

var flag = 0; // Flag is to check if you are hovering on already clicked item

$("a").click(function() {
    $('a').removeClass("YourColorClass");
    $(this).addClass("YourColorClass");
    flag=1;
}); 

$("a").mouseover(function() {
    if ($(this).hasClass("YourColorClass")) {
        flag=1;
    }
    else{
        $(this).addClass("YourColorClass");
    };
});

$("a").mouseout(function() {
    if (flag == 0) {
        $(this).removeClass("YourColorClass");
    }
    else{
        flag = 0;
    }
});
0
Abhishek Goel

これは私の解決策です:

$(document).ready(function () {
  $( "td" ).on({
    "click": clicked,
    "mouseover": hovered,
    "mouseout": mouseout
});

var flag=0;

function hovered(){
  $(this).css("background", "#380606");
}

function mouseout(){
  if (flag == 0){
  $(this).css("background", "#ffffff");
} else {
  flag=0;
}
}

function clicked(){
  $(this).css("background","#000000");
  flag=1;
}
})
0
Priyanka