我一直在研究这个赞成/反对票问题,并且一直遇到 3 个问题。
代码:
$(function() {
$('button').click(function(e){
e.preventDefault();
var $this = $(this),
$container = $(this).parent(),
$buttons = $container.children('button'),
$count = $container.children('.count'),
was = $container.data('was');
// 0 case
if ($this.is('.up')) {
if (was === 0 || $this.is('.active')) {
vote = 0;
} else {
vote = 1;
}
} else {
vote = -1;
}
if ( was + vote < 0 ) {
$this.toggleClass('active');
return false;
}
if( $this.hasClass('active') ){
$this.toggleClass('active');
$count.text( was );
} else {
if( $buttons.filter('.active').length ){
$buttons.toggleClass('active');
} else {
$this.toggleClass('active');
}
$count.text( was + vote );
}
});
});
现场演示:jsfiddle </p>
我在演示中标记了每个案例(总共 6 个案例)
问题:
案例#1:如果上面有一个活动类并且它最初是(data-was)0,那么点击向下应该添加一个活动类向下将其变为红色并保持计数为0。
案例 #2:如果活动班级在向下按钮上,并且原始分数(数据是)为 1,那么活动班级应该继续向上,并且计数应该达到 3。
案例#3:如果按钮上有一个向上类并且原始分数是(data-was)1,那么单击向下应该使其变为0并将一个活动类放在向下,单击向上应该使其变为0从 up 中删除活动类,然后在向下单击活动类的情况下单击应该将其返回到 1。
案例 #4 - #6 都表现正常,所以如果不清楚问题出在哪里,它们都应该表现得如此,但永远不要低于 0。
这变得有点复杂,所以我正在辩论只是显示来自 ajax 请求的实际返回分数,但我不希望点击之间有任何延迟,所以这就是我以这种方式接近它的原因。