Here是小提琴。我正在尝试使用<div>
创建自己的复选框,并使用$().css()
应用颜色。当您点击div
时,我尝试在点击功能中使用$().toggleClass()
将背景颜色更改为#96f226
jQuery的:
$('div').mouseenter(function(){
$(this).css('background','#656565');
});
$('div').mouseleave(function(){
$(this).css('background','#4a4a4a');
});
$('div').click(function(){
$(this).toggleClass('active');
});
HTML:
<div></div>
CSS:
div {
width: 15px;
height: 15px;
background: #4a4a4a;
cursor: pointer;
}
.active {
background: #96f226
}
答案 0 :(得分:5)
通过.css
调用'background'属性,您可以更改指定为其属性的元素的相应内联样式。换句话说,您的mouseenter
处理程序会将<div>
变为<div style="background: ##656565">
。 mouseleave
的工作方式与此类似,只是style
属性的值不同。
问题是以这种方式设置的样式规则 - 在style
属性中 - 具有最高specificity,而不是由于类匹配规则(或任何选择器组合)而应用的样式规则在CSS规则集中给出。
这就是为什么在将类active
添加到元素时没有看到任何更改的原因(并且很容易检查类IS是否确实添加;它只是其规则未被计算)。
如果您完全删除所有内联样式并使用其他类 - 要设置mouseenter
处理程序,并删除mouseleave
,那么该问题很容易解决。
但实际上,您甚至不需要:您尝试处理的事件已经由浏览器以非常好的方式处理。这很容易利用:只需设置:hover伪类的样式规则,如下所示:
div:hover {
background: #656565
}
div.active, div.active:hover {
background: #96f226
}
这是一个Fiddle来玩。
答案 1 :(得分:1)
这是因为class
的优先顺序低于style
属性。
答案 2 :(得分:0)
直接在元素上设置CSS属性时,优先于切换的类。为了使它工作,你必须添加另一个类。
.enter {
background: #656565;
}
然后你的JS会是这样的:
$('div').mouseenter(function(){
$(this).addClass("enter");
});
$('div').mouseleave(function(){
$(this).removeClass("enter");
});
$('div').click(function(){
$(this).toggleClass('active');
});
请参阅此小提琴http://jsfiddle.net/w8yuZ/5/
答案 3 :(得分:0)
试试这个:
$(function(){
$('div').mouseenter(function(){
$(this).css('background','#656565');
});
$('div').mouseleave(function(){
$(this).css('background','#4a4a4a');
});
$('div').click(function(){
$(this).toggleClass('active');
});
});
答案 4 :(得分:-3)
这将对您有所帮助:
.active {
background: #96f226 !important;
}