想知道如何处理这个问题。我以前做过,但它涉及很多if / else语句,我似乎无法解决这个问题。我在codereview上发布了它并让某人帮我重新设置它,但现在我正在尝试使这个功能正常工作。
现在如何运作,如果点击“向上”,它会将得分提高1点。如果再次单击“向上”,则会降低分数。没关系。如果单击“向下”,它将具有相同的行为。然而,它不会低于0,因为我不想显示负分。
现在我只是检查上一个或下一个按钮是否有.upColor
和.downColor
css类,检查它们是否已经投票。我无法根据此情况尝试更新正确的分数,特别是如果原始分数为0,或者分数为10。
逻辑我正在尝试实施:
E.g。原分为0:
E.g。原来的分数是10:
代码:
$(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);
});
});
答案 0 :(得分:0)
我不会重写你的代码因为它需要我太长时间,但我会给你一些我从一开始就会使用的代码。
从原始号码开始:
var original_vote = 2;
var current_vote = original_vote;
将此作为常量保留,以指代未来。然后,当您单击向上投票时,您只需添加1即可:
current_vote = original_vote + 1;
然后取消选中投票结果:
current_vote = original_vote;
然后就反向投票了。
保留原始号码可确保您不会意外地使投票超出其应有的范围。
希望这有帮助!