2011-06-23 26 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類型。