这是令人费解的,但我似乎无法找到一个体面的jQuery星级评级插件,当你点击一个评级星时清除评级(如:你评价3星,你再次点击第三颗星,评级被删除).我一直在寻找在星星左边有那个愚蠢的"清晰评级"按钮的插件.当我使用原型时,我使用的是ratingbox,它工作得很好,但我找不到jQuery的等价物.
我非常感谢任何建议!
如果您不需要任何特殊功能,则可以使用我的代码.如果需要,应该很容易将其转换为插件.
如果您不需要悬停跟踪效果,只需删除mouseenter和mouseleave事件.
设置的评级保存在容器div的数据属性中,您可以通过它访问它$('.rating').data('rating').
查看一个带有来自互联网的随机图像的现场演示:http://jsfiddle.net/abPFF/1/
HTML:
<div class="rating" data-rating="3">
<div></div><div></div><div></div><div></div><div></div>
</div>
Run Code Online (Sandbox Code Playgroud)
CSS:
.rating { display:inline-block; padding:0px; }
.rating div { display:inline-block; width:48px; height:48px; margin:0px; background-image: url('star-off.png');}
.selected { background-image: url('star.png') !important; }
.highlighted { background-image: url('star.png') !important; }
Run Code Online (Sandbox Code Playgroud)
使用Javascript:
function ShowRating($element, rating){
$stars = $element.find('div');
$stars.removeClass('selected highlighted');
rating = parseInt(rating);
if(rating < 1 || rating > $stars.length) return;
$stars.eq(rating-1).addClass('selected')
.prevAll().addClass('highlighted');
return;
}
$('.rating').each(function(){
var $this = $(this);
ShowRating($this, $this.data('rating'));
}).bind({
mouseleave: function(){
var $this = $(this);
ShowRating($this, $this.data('rating'));
}
}).find('div').bind({
mouseenter: function(){
var $this = $(this);
ShowRating($this.parent(), $this.index() + 1);
},
click: function(){
var $this = $(this);
var $parent = $this.parent();
var idx = $this.index() + 1;
if($parent.data('rating') == idx){
// Remove rating
ShowRating($parent, 0);
$parent.data('rating', 0);
} else {
// Set rating
ShowRating($parent, idx);
$parent.data('rating', idx);
}
}
});
Run Code Online (Sandbox Code Playgroud)