2011-06-23 22 views
4

我正在创建一个Q &允许用户对答案进行投票的网站。我已经将project.problem.upVoted设置为用户已经投票的答案列表。如果答案已经被投票,upvote箭头的点击事件的回调应该删除当前的投票,如果它还没有被投票,它应该投票。这个表达式为什么总是假?

下面是我的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控制台,而代answerID与91它的值为true:

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

是$ .inArray(answerID,project.problem.upVoted)返回0预期?你应该尝试做parseInt(answerID),它可能会以字符串形式出现。 – drewblaisdell

+0

是啊,看看那个函数调用返回 – Claudiu

+0

在answerID上使用parseInt修复它。谢谢! :) – Jackie

回答

1

当您将输入的值放入answerID中时,其类型是一个字符串,而不是整数。您需要将变量转换为整数,像这样的:

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

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

0

尝试:

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

确保您正在检查的值是一个int:

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

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