我做了一个简单的例子,我的问题,所以我想这是比较容易让你了解。 我有几个div
S的都有一个灰色的,但是当你将鼠标悬停在其中的一个,你看他们得到他们的真实色彩。 如果我点击其中一个(和它提醒点击)应该改变颜色和.hover()
不应该在该元素上工作了,直到另外一个被点击。 我坐在这里一小时,没有得到它的工作:
.test { background-color: #ccc;}
<div class="test" id="d1"></div>
<div class="test" id="d2"></div>
<div class="test" id="d3"></div>
和脚本:
$(function() {
$('#d1').hover(function() { $(this).css('background-color', '#F00'); }, function() { $(this).css('background-color', '#CCC'); });
$('#d2').hover(function() { $(this).css('background-color', '#F0F'); }, function() { $(this).css('background-color', '#CCC'); });
$('#d3').hover(function() { $(this).css('background-color', '#00F'); }, function() { $(this).css('background-color', '#CCC'); });
$('#d1').click(function() { $(this).css('background-color','#F00'); alert("clicked")});
$('#d2').click(function() { $(this).css('background-color','#F0F'); alert("clicked")});
$('#d3').click(function() { $(this).css('background-color','#00F'); alert("clicked")});
})
对于链接点击这里
看来,悬停仍然有效,并立即删除背景颜色。
提前致谢!
Answer 1:
好了, 没有太多改变你的代码 [重构]:
$(function() {
var clickedId = '';
$('#d1').hover(function() {
$(this).css('background-color', '#F00');
}, function() {
if (this.id != clickedId) {
$(this).css('background-color', '#CCC');
}
});
$('#d2').hover(function() {
$(this).css('background-color', '#F0F');
}, function() {
if (this.id != clickedId) {
$(this).css('background-color', '#CCC');
}
});
$('#d3').hover(function() {
$(this).css('background-color', '#00F');
}, function() {
if (this.id != clickedId) {
$(this).css('background-color', '#CCC');
}
});
$('#d1').click(function() {
clickedId = this.id;
$('.test').not(this).css('background-color','#CCC');
alert("clicked");
});
$('#d2').click(function() {
clickedId = this.id;
$('.test').not(this).css('background-color','#CCC');
alert("clicked");
});
$('#d3').click(function() {
clickedId = this.id;
$('.test').not(this).css('background-color','#CCC');
alert("clicked");
});
})
变化:
- 使用一个变量来保存最后单击元素的ID
- 当你点击一个元素,存储单击元素的ID。 另外,设置所有的元素(除非你点击一个),回到原来的背景色。
- 悬停时,检查是否失去悬停的元素是最后单击元素的ID(如果是,不改变它的背景背面)。
顺便说一句,我可能会使用CSS类和设置.active
所点击的元素,并使用.test:hover
。 但我认为这是学习的目的一个基本的JavaScript的例子。
如果你想看到一个与CSS: http://jsfiddle.net/MgTr4/1/
Answer 2:
HTML
<div class="test" data-selected-item="d1" id="d1"></div>
<div class="test" data-selected-item="d2" id="d2"></div>
<div class="test" data-selected-item="d3" id="d3"></div>
CSS
.test { margin-left: 50px; background-color:#CCC; height: 50px; width: 50px; float: left; margin-top: 50px; }
.d1 { background-color : #F00 !important;}
.d2{ background-color : #F0F !important;}
.d3 { background-color : #00F !important;}
JS
$(function() {
$('.test').click(function() {
$(this).hasClass($(this).data('selected-item')) ? $(this).removeClass($(this).data('selected-item')) : $(this).addClass($(this).data('selected-item'));
});
});
样品http://jsfiddle.net/sheeban/gEftm/3/
Answer 3:
您可以通过使用类大大简化代码,以及jQuery方法.addClass
和.removeClass
工作的jsfiddle这里
HTML:
<div class="test" id="d1" mycolor='#F00'></div>
<div class="test" id="d2" mycolor='#F0F'></div>
<div class="test" id="d3" mycolor='#00F'></div>
jQuery的/ JavaScript的:
$('.test').hover(
function() {
if ($(this).hasClass('stick') == false) {
$(this).css('background-color', $(this).attr('mycolor') );
}
},function() {
if ($(this).hasClass('stick') == false) {
$(this).css('background-color', '#CCC');
}
});
$('div').click(function() {
$('div').removeClass('stick');
$(this).addClass('stick');
});
CSS:
.test { background-color: #ccc;}
div{width:150px;height:80px;margin:5px;}
为了简化甚至更多,你可以删除class="test"
从所有的DIV,并更改悬停选择器:
$('div').hover( etc etc
这不会检测到干扰click
上选择的相同的收集事件。
Answer 4:
在这里,你去一个非常简单的解决方案:
现场演示
$('.test').hover(function( e ){
var hc = $(this).hasClass('test');
$(this).css({ backgroundColor : (e.type=="mouseleave" && hc) ? '#ccc' : $(this).data('c') });
}).click(function(){
$(this).toggleClass('test test2 ');
});
具有这种HTML:
<div class="test" id="d1" data-c="#f00"></div>
<div class="test" id="d2" data-c="#f0f"></div>
<div class="test" id="d3" data-c="#00f"></div>
而这两个类中的CSS:
.test, .test2{
Answer 5:
这是更好地在这种情况下使用的CSS。 JavaScript解决方案更为复杂。 你的情况,你可以更改代码的“悬停”块并将其更改为CSS规则:
#d1:hover { background-color: #F00; }
#d2:hover { background-color: #F0F; }
#d3:hover { background-color: #00F; }
下面是一个例子: 的jsfiddle ,编辑后: jsFiddle2
文章来源: handle jQuery hover behavior