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

时间:2011-06-23 19:58:02

标签: javascript jquery

我正在创建一个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

3 个答案:

答案 0 :(得分:1)

确保您检查的值是int:

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

另外,您可能希望确保数组中的值也是int类型。

答案 1 :(得分:1)

当您将输入的值放入answerID时,其类型是字符串,而不是整数。您需要将变量强制转换为整数,如:

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

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

答案 2 :(得分:0)

尝试:

var answerID = $(this).parents("div.answer").find("input.answerID").val();
var isUpVoted = $.inArray(+answerID, project.problem.upVoted) > -1;