0

我有一个如下的 HTML 片段

var useful, cool, funny;

'<ul data-component-bound="true" class="voteset'+data[i]['review_id']+'">'+
    '<li class="useful ufc-btn" id="1">'+
      '<a href=javascript:vote('+data[i]['review_id']+',"useful") rel="useful"><span>Useful</span></a>'+
        '<span>'+useful+'</span>'+
    '</li>'+
    '<li class="funny ufc-btn" id="2">'+
      '<a href=javascript:vote('+data[i]['review_id']+',"funny") rel="funny"><span>Funny</span></a>'+
        '<span>'+funny+'</span>'+
    '</li>'+
    '<li class="cool ufc-btn" id="3">'+
      '<a href=javascript:vote('+data[i]['review_id']+',"cool") rel="cool"><span>Cool</span></a>'+
        '<span>'+cool+'</span>'+
    '</li>'+
    '<span class="vote'+data[i]['review_id']+'"></span></ul>'+
'</div>';

每个评论都有 3 个有用、酷和有趣的按钮。当我执行点击操作时,如何增加<span>每个按钮内的计数。以下是我尝试但不起作用的方法。谢谢

function vote(reviewId,status) {
    $('.vote'+reviewId).text('posting ...');
    $('.voteset'+reviewId).click(function(){
      var updatevote = $(this).find("li>span").text();
      updatevote = updatevote + 1;
      $(this).next('span').html(updatevote);
    });
}
4

4 回答 4

2

parseIntNaN如果字符串为空将导致问题"",请尝试Math.floor

function vote(reviewId,status)
{

    $('.vote'+reviewId).text('posting ...');
    $('.vote'+reviewId).text('posting ...');
        var $span = $('.voteset' + reviewId + ' li.' + status + ' span:eq(1)');
        $vote = Math.floor($span.text()) + 1; 
        $span.html($vote);
}
于 2012-10-16T03:37:19.290 回答
1

updatevote将被解释为文本,而不是数字。尝试

var updatevote = parseInt($(this).find("li>span").text(), 10);
于 2012-10-15T20:45:06.550 回答
0

尝试这个

var updatevote = +$(this).find("li>span").text(); // Convert to number

updatevote++;

还会$(this).find("li>span") 给你一个包含 li 内所有 span 的对象。我看到其中 3 个在 3 个不同的 li 中

你是怎么处理的。。

于 2012-10-15T20:46:10.710 回答
0

您的事件绑定存在一般问题

function vote(reviewId,status) {
    $('.vote'+reviewId).text('posting ...');
    $('.voteset'+reviewId).click(function(){ // <-don't need this since you call vote directly from a#href
      var updatevote = $(this).find("li>span").text();
      updatevote = updatevote + 1;
      $(this).next('span').html(updatevote);
    });
}

这应该工作:

function vote(reviewId,status) {
    $('.vote'+reviewId).text('posting ...');

    var $span = $('.voteset' + reviewId + ' li.' + status + ' span');
    var updatevote = parseInt($span.text(), 10);

    updatevote = updatevote + 1;
    $span.text(updatevote);

}
于 2012-10-15T20:55:13.193 回答