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