javascript – 为什么这个表达式总是假的?

我正在创建一个Q& A网站,允许用户对答案进行投票.我已将project.problem.upVoted设置为用户已经投票的答案列表.如果答案已经投票,则upvote arrow的点击事件的回调应该删除当前的投票,如果尚未投票,则应该投票.

这是我的uparrow图像的回调函数:

project.problem.upVoteCallback = function(event)
{
    var answerID = $(this).parents("div.answer").find("input.answerID").attr("value");
    var isUpVoted = $.inArray(answerID, project.problem.upVoted) > -1;

    //some debug statements
    alert("id: " + answerID + " | upvoted: " + project.problem.upVoted);
    alert("isupvoted: " + isUpVoted);

    if(isUpVoted)
    {
        //delete vote
    }
    else
    {
        //cast upvote
    }
}

问题是isUpVoted总是假的.例如,在我的测试页面上,当我尝试删除投票时,我得到了这个输出:

id: 91 | upvoted: 91,92,93 
isupvoted : false

然而,如果我将谓词复制到chrome的js控制台,同时用91替换answerID,则计算结果为true:

$.inArray(91, project.problem.upVoted) > -1; 
true

最佳答案 当您将输入的值放入answerID时,其类型是字符串,而不是整数.您需要将变量强制转换为整数,如下所示:

var isUpVoted = $.inArray(parseInt(answerID), project.problem.upVoted) > -1;

这将确保jQuery的inArray函数比较相同的数据类型,而不是将字符串与整数进行比较.

点赞