我基本上已经为评级系统星级评分系统编写了一个代码,它一切正常,代码很好
<script type="text/javascript">
(function($){
$(document).ready(function() {
var $option = $('.option');
var $fruit = $('.fruit-name');
var $last;
var parent
$option.click(function() {
parent=$(this).parents('.comment-form-rating');
$('.fruit-name',parent).val(this.innerHTML)
})
$(".starr1").hover(function(){
parent=$(this).parents('.comment-form-rating');
$('.starr1',parent).css('color','gold')
},function(){
$(".starr1").css("color","#ddd");
});
$(".starr2").hover(function(){
parent=$(this).parents('.comment-form-rating');
$('.starr1',parent).css('color','gold')
$('.starr2',parent).css('color','gold')
},function(){
$(".starr1").css("color","#ddd");
$(".starr2").css("color","#ddd");
});
$(".starr3").hover(function(){
parent=$(this).parents('.comment-form-rating');
$('.starr1',parent).css('color','gold')
$('.starr2',parent).css('color','gold')
$('.starr3',parent).css('color','gold')
},function(){
$(".starr1").css("color","#ddd");
$(".starr2").css("color","#ddd");
$(".starr3").css("color","#ddd");
});
$(".starr4").hover(function(){
parent=$(this).parents('.comment-form-rating');
$('.starr1',parent).css('color','gold')
$('.starr2',parent).css('color','gold')
$('.starr3',parent).css('color','gold')
$('.starr4',parent).css('color','gold')
},function(){
$(".starr1").css("color","#ddd");
$(".starr2").css("color","#ddd");
$(".starr3").css("color","#ddd");
$(".starr4").css("color","#ddd");
});
$(".starr5").hover(function(){
parent=$(this).parents('.comment-form-rating');
$('.starr1',parent).css('color','gold')
$('.starr2',parent).css('color','gold')
$('.starr3',parent).css('color','gold')
$('.starr4',parent).css('color','gold')
$('.starr5',parent).css('color','gold')
},function(){
$(".starr1").css("color","#ddd");
$(".starr2").css("color","#ddd");
$(".starr3").css("color","#ddd");
$(".starr4").css("color","#ddd");
$(".starr5").css("color","#ddd");
});
});
})(jQuery);
</script>
但是我必须为我的星星定义一个点击功能,当用户点击星星5时会产生全明星红色 -
我这样定义了
$(".starr5").click(function () {
parent = $(this).parents('.comment-form-rating');
$('.starr1', parent).css('color', '#FF7777')
$('.starr2', parent).css('color', '#FF7777')
$('.starr3', parent).css('color', '#FF7777')
$('.starr4', parent).css('color', '#FF7777')
$('.starr5', parent).css('color', '#FF7777')
});
这就是问题发生的地方 - 现在星星变成了红色,但是在鼠标左侧它们再次变成灰色,鼠标悬停在黄色悬停的功能上开始工作 - 总是混乱如何编写更多代码使它工作。
答案 0 :(得分:1)
你应该在进入和离开时添加和删除类,所以当
时 on mouseenter
.addClass('gold')
on click
.removeClass('gold').addClass('red');
on mouseleave
.removeClass('gold');
你做得很好;快乐的编码。
Star1示例请求:
<style type="text/css">
.gold{color: gold;}
.red{color: #FF7777;}
.yourDefaultStarClass{color: #ddd;}
</style>
<script type="text/javascript">
(function($){
$(".starr1").hover(function(){
parent=$(this).parents('.comment-form-rating');
$('.starr1',parent).addClass('gold');
},function(){
$(".starr1").removeClass('gold');
});
$(".starr5").click(function () {
parent = $(this).parents('.comment-form-rating');
$('.starr1', parent).removeClass('gold').addClass('red');
});
});
</script>
答案 1 :(得分:1)
我可以用你的所有元素和类来清除HTML中的混乱......
为了简化你的生活,我写了一个非常简单的代码:
这就是你所需要的:
<强> HTML:强>
<img class="stars" data-rated="4" src="whiteImgWithStarsHoles.png" />
其中数据评级是您的服务器返回的值(1-5) 创建一个与背景颜色相匹配的图像,创建5个星形孔并保存为 .png
<强> CSS:强>
.stars{
cursor:pointer;
max-width:200px; /* respective to the gray image width */
background: gold url(grayimage200x100.jpg) no-repeat 0 bottom;
/* transition: 1s;*/
}
.stars.red{
background-color: red;
}
<强> jQuery的:强>
$('.stars').each(function(){
var $this = $(this),
starW = $this.width() / 5,
rated = 0;
function setRates(){
rated = $this.data('rated') * starW;
$this.css({backgroundPosition: rated+'px top'});
}
setRates();
$this.on('mousemove', function( e ){
rated = Math.ceil( (e.clientX-$this.offset().left) / starW );
$this.not('.red').css({backgroundPosition: rated*starW +'px top'});
}).on('mouseleave', setRates).on('click', function(){
$this.not('.red').data('rated', rated).addClass('red');
// alert("Send to server: "+ rated );
});
});