2011-06-23 2 views
4

Je crée un Q & Un site qui permet aux utilisateurs de voter sur les réponses. J'ai mis project.problem.upVoted à une liste de réponses que l'utilisateur a déjà upvoted. Si la réponse est déjà votée, le rappel de l'événement click de la flèche upvote devrait supprimer le vote en cours, et s'il n'a pas déjà été voté, il devrait voter pour celui-ci.Pourquoi cette expression est-elle toujours fausse?

est ici la fonction de rappel pour mon image 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 
    } 
} 

Le problème est que isUpVoted est toujours faux. Par exemple, sur ma page de test, lorsque je tente de supprimer un vote je reçois cette sortie:

id: 91 | upvoted: 91,92,93 
isupvoted : false 

Cependant, si je copie le prédicat à la console js de chrome tout en substituant answerID 91 il évalue true:

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

est $ .inArray (answerID, project.problem.upVoted) renvoyant 0 comme prévu? Vous devriez essayer de faire parseInt (answerID), cela pourrait être une chaîne de caractères. – drewblaisdell

+0

Oui, voir ce que cet appel de fonction renvoie – Claudiu

+0

L'utilisation de parseInt sur answerID l'a corrigé. Merci! :) – Jackie

Répondre

1

Lorsque vous placez la valeur de l'entrée dans answerID, son type est une chaîne et non un nombre entier. Vous devez lancer la variable à un nombre entier, comme par exemple:

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

Cela fera en sorte que la fonction InArray jQuery compare les mêmes types de données, au lieu de comparer une chaîne à des nombres entiers.

0

Essayez:

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

Assurez-vous que la valeur que vous archivez est un entier:

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

Vous pouvez également vous assurer que les valeurs du tableau sont également de type int.

Questions connexes