根据以前的分数实施投票逻辑

时间:2012-11-08 00:47:32

标签: javascript jquery

想知道如何处理这个问题。我以前做过,但它涉及很多if / else语句,我似乎无法解决这个问题。我在codereview上发布了它并让某人帮我重新设置它,但现在我正在尝试使这个功能正常工作。

现在如何运作,如果点击“向上”,它会将得分提高1点。如果再次单击“向上”,则会降低分数。没关系。如果单击“向下”,它将具有相同的行为。然而,它不会低于0,因为我不想显示负分。

现在我只是检查上一个或下一个按钮是否有.upColor.downColor css类,检查它们是否已经投票。我无法根据此情况尝试更新正确的分数,特别是如果原始分数为0,或者分数为10。

逻辑我正在尝试实施:

E.g。原分为0:

  • 用户投票。得分为1.用户投票结果。得分为0(不是-1)
  • 用户投票否决。分数保持在0.用户投票。得分为1。

E.g。原来的分数是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/

1 个答案:

答案 0 :(得分:0)

我不会重写你的代码因为它需要我太长时间,但我会给你一些我从一开始就会使用的代码。

从原始号码开始:

var original_vote = 2;
var current_vote = original_vote;

将此作为常量保留,以指代未来。然后,当您单击向上投票时,您只需添加1即可:

current_vote = original_vote + 1;

然后取消选中投票结果:

current_vote = original_vote;

然后就反向投票了。

保留原始号码可确保您不会意外地使投票超出其应有的范围。

希望这有帮助!