更新元素后,jQuery hasClass()函数无法正常工作

时间:2014-05-29 09:36:15

标签: javascript jquery

我创建了一个按钮,允许我平台的用户提交一个帖子,或者如果再次按下该按钮,则删除先前的投票。

问题是当用户第二次点击按钮时,在投票后没有任何反应。

这是管理按钮行为的代码:

if($(".timeline-action-plus").hasClass("btn-success")) {
    $(".timeline-action-plus").click(function(){
        rating.removeVote($(this).data("entry-id"), $(this).data("token"));
    });
} else {
    $(".timeline-action-plus").click(function(){
        rating.votePlus($(this).data("entry-id"), $(this).data("token"));
    });
}

removeVotevotePlus函数也负责修改按钮的方面:

function votePlus(id,token){

    $.post(
        "http://localhost/user/vote",
        {
            rating  : '1',
            entryID : id,
            _token  : token
        },
        function(result) {
            if(result === "OK"){
                $(".timeline-action-plus[data-entry-id=" + id + "]").removeClass("btn-default");
                $(".timeline-action-plus[data-entry-id=" + id + "]").addClass("btn-success");
            }
        }
    );
}

function removeVote(id, token) {
    $.post(
        "http://localhost/user/removeVote",
        {
            entryID : id,
            _token  : token
        },
        function(result) {
            if(result === "OK") {
                $(".timeline-action-plus[data-entry-id=" + id + "]").removeClass("btn-success");
                $(".timeline-action-plus[data-entry-id=" + id + "]").addClass("btn-default");
            }
        }
    )
}

基本上$(".timeline-action-plus").hasClass("btn-success")似乎只能在removeVotevotePlus函数更新按钮类之前使用。

修改

这是按钮:

<button class="btn btn-xs @if(Rating::userHasVoted(Auth::user()->username, $article->id)) btn-success @else btn-default @endif timeline-action timeline-action-plus" data-entry-id="{{$ID}}" data-toggle="tooltip" data-token="{{csrf_token()}}" id="vote{{$ID}}" Title="+1">
    <span class="glyphicon glyphicon-thumbs-up"></span>
    <span id="voteNumber{{$ID}}"></span>
</button>

1 个答案:

答案 0 :(得分:7)

您需要在点击功能中移动hasClass支票:

$(".timeline-action-plus").click(function(){
    if ($(this).hasClass("btn-success")) {
        rating.removeVote($(this).data("entry-id"), $(this).data("token"));
    else
        rating.votePlus($(this).data("entry-id"), $(this).data("token"));
});

现在,每次单击元素时都会执行检查。