jQuery没有更新DOM元素HTML

时间:2015-08-11 22:26:14

标签: javascript jquery html

我正在尝试上/下投票系统,但是当我从API获得响应时,我似乎无法定位我想要的元素,这是li中的一个“得分”的范围”。

我的js处理程序

    jQuery(document).ready(function($) {
    function vote(obj, post_id,vote) {
        if(vote && post_id) {

             $.get('/ajax/vote', { 
                v: vote,
                p: post_id
                }, function(data){
                    //set the .score to the new count returned by API
                    console.log(data);
                    $(obj).child('li.score').html(data.votes);
             });
        }
    }
    $(document.body).on("click", ".upvote", function(obj){ 
        console.log("Up Voted");

        var post_id = $(this).closest(".card").prop('id').replace(/post-id-/, '');
        vote(obj,post_id,1); 
    });

    $(document.body).on("click", ".downvote", function(){
        console.log("Down Voted");
        // more to come
    });
});

触发事件的html视图以及它下面的“得分”区域。

        <div class="vote-controls col-xs-1">
        <ul>
            <li class="upvote"><a href="#" class="disable"><span class="fa fa-angle-up "></span><span class="sr-only">&uarr;</span></a></li>
            <li class="downvote"><a href="#" class="disable"><span class="fa fa-angle-down"></span><span class="sr-only">&darr;</span></a></li>
            <li class="score"><span>0</span></li>
        </ul>
    </div>

3 个答案:

答案 0 :(得分:1)

li.score不是obj的孩子。鉴于该对象实际上是通过将$(this)传递给函数而单击的DOM对象,我想它应该是:

$(obj).parent('ul').children('li.score').html(data.votes);

答案 1 :(得分:0)

问题是objEvent对象,而不是您的HTML元素。此外,没有child方法。使用children

更改此行:

vote(obj, post_id, 1);

为:

vote($(this).parents('ul'), post_id, 1);

这应该将ul传递给您的vote()函数。

并改变:

$(obj).child('li.score').html(data.votes);

为:

$(obj).children('li.score').html(data.votes);

答案 2 :(得分:0)

obj是事件对象,这是你想要做的事情

$(obj.currentTarget).siblings('li.score').find('>span').text(html.votes);