我正在创建一个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函数比较相同的数据类型,而不是将字符串与整数进行比较.