想知道如何处理这个问题。我以前做过,但它涉及很多 if/else 语句,如果不诉诸于此,我似乎无法弄清楚。我在 codereview 上发布了它,并请人帮我重新考虑它,但现在我正试图让这个功能正常工作。
现在的工作原理是,如果您单击“向上”,它将增加 1 分。如果您再次单击“向上”,它会降低分数。没关系。如果您单击“向下”,它将具有相同的行为。但是它永远不会低于 0,因为我不想显示负分。
现在我只是检查上一个或下一个按钮上是否有.upColor
和.downColor
css 类,检查他们是否已经投票。我在尝试基于此更新正确分数时遇到问题,尤其是在原始分数为 0 或分数为 10 的情况下。
我试图实现的逻辑:
例如,原始分数为 0:
- 用户投票。得分为 1。用户投反对票。分数变为 0(不是 -1)
- 用户投反对票。分数保持在 0。用户投票赞成。分数变为 1。
例如,原始分数为 10:
- 用户投票。得分为 11。用户投反对票。分数达到 9。
- 用户投反对票。得分为 9。用户投票。分数达到 11。
代码:
$(function() {
var handleClick = function($btn) {
var $voteContainer = $btn.parent();
var scoreNode = $('.count');
var originalScore = Number($voteContainer.data('original-score'));
if ($btn.hasClass('down')) {
if ($btn.prevAll('.up').hasClass('upColor')) {
$btn.prevAll('.up').toggleClass('upColor');
alert('voted up now voting down, decrease 2 points, but don\'t go below 0.');
}
}
if ($btn.hasClass('up')) {
if ($btn.nextAll('.down').hasClass('downColor')) {
$btn.nextAll('.down').toggleClass('downColor');
alert('voted down now voting up, increase by 2 points');
}
}
var increment = $btn.hasClass('up') ? 1 : $btn.hasClass('down') && originalScore > 0 ? -1 : 0; // default
// Only do something if there is an increment
if (increment) {
var currentScore = Number(scoreNode.text()) || 0;
var newScore = currentScore + increment;
var diff = Math.abs(originalScore - newScore);
// Can't go more than + or - 1
if (diff > 1) {
newScore = originalScore;
}
// Set new displayed value
scoreNode.text(newScore);
}
$btn.hasClass('up') ? $btn.toggleClass('upColor') : $btn.toggleClass('downColor');
};
var upBtn = $('.up');
var downBtn = $('.down');
upBtn.add(downBtn).click(function() {
var $btn = $(this);
handleClick($btn);
});
});
演示:http: //jsfiddle.net/3kCPw/