Jquery: Liaison de modification sur plusieurs cases à cocher
Pour un peu de l'arrière-plan, j'ai plusieurs cases, pondérées chacune par un autre "score". Lorsque la case n'est changé, j'ai besoin de calculer le score. J'ai pensé quelque chose comme cela pourrait fonctionner, mais il ne ressemble pas à de la .événement de changement est lié correctement.
$(document).ready(function() {
bindSomeCheckboxes();
});
function bindSomeCheckboxes() {
var score=0;
var checkboxes = {
"id_1" : 3,
"id_2" : 1,
"id_3" : 2,
"id_4" : 5
};
$.each(checkboxes, function(key, value) {
$("#"+key).change(function(key,value) {
if ($("#"+key).is(':checked')) {
//add this ids value to score
} else {
//subtract value from score
}
});
});
}
Je sais que c'est une boucle dans le tableau correctement, mais une alerte .le changement n'est jamais vu.
Il devrait être
Il semble que toutes les réponses sont à côté du fait que chaque id est unique "score". C'est pourquoi j'ai la cartographie de l'id -> score. J'ai fait le cliqué -> vérifié la correction ci-dessus et changé les commentaires pour montrer ce que je suis en train d'accomplir. J'admets que je pourrait faire de mal. 😉
J'ai ajouté une réponse qui maintient la structure de base que vous travailliez. Je pense que vous essayiez de référence
:checked
au lieu de :clicked
, voir ma réponse pour plus d'info.Il semble que toutes les réponses sont à côté du fait que chaque id est unique "score". C'est pourquoi j'ai la cartographie de l'id -> score. J'ai fait le cliqué -> vérifié la correction ci-dessus et changé les commentaires pour montrer ce que je suis en train d'accomplir. J'admets que je pourrait faire de mal. 😉
J'ai ajouté une réponse qui maintient la structure de base que vous travailliez. Je pense que vous essayiez de référence
key
à l'intérieur du gestionnaire de la pensée, il aurait l'ID. Le problème est que vous avez donné à votre gestionnaire de son propre key
paramètre, qui est en réalité référence à la event
objet. Supprimer (ou renommer), et vous auriez le key
. Mais vous n'en avez pas besoin, parce que vous avez une référence directe à l'ID que vous avez besoin, parce que this
références celui qui a reçu l'événement, de sorte this.id
est l'ID de celui-là.OriginalL'auteur Magic Hat | 2010-10-13
Vous devez vous connecter pour publier un commentaire.
Si vous avez vraiment envie de prendre cette approche de l'utilisation IDs, je voudrais faire un Tableau séparé de la pièce d'identité, et de faire une
.join()
pour créer le sélecteur.Des choses à noter:
.is(':clicked')
ou.is(':checked')
, utilisezthis.checked
. Beaucoup plus efficace.event
. Vous avez 2 pourkey,value
. Cela faitkey
dans le gestionnaire de se reporter à ceevent
objet au lieu de lekey
de la$.each()
.this
se réfère à celui qui a été cliqué.this
référence à l'élément, vous n'avez pas besoin de la référence àkey
dans le$.each()
. Il vous suffit de fairethis.id
.Vous êtes les bienvenus. Laissez-moi savoir si vous avez des questions. :o)
Hé, après tout ce que je viens de réaliser que ce n'est pas de travail, en partie parce que le div contenant ces cases à cocher n'est pas disponible sur le $(document).prêt... de Bons moments de débogage, le mal de choses.
Ah oui, ça ferait une différence. :o)
OriginalL'auteur user113716
Je vous recommande d'ajouter un conteneur et sélectionner toutes les cases à la fois.
Et pour votre question, la signature de l'événement est faux, le bon est
function(e){}
. Aussi, vous devez vérifier si l'élément est coché, et pas cliqué.Pour le rendre plus facile, utiliser un récipient
Échantillon HTML
Et pour les scores, je préfère mettre des données sur les éléments, par exemple:
OriginalL'auteur BrunoLM
Je recommanderais obtenir les cases d'une façon plus naturelle...
Si vous voulez restreindre les cases à cocher à utiliser, vous pouvez ajouter une classe, même si vous pouvez éviter d'ajouter inutile classes, votre code sera plus propre.
OriginalL'auteur Fenton
essayez d'utiliser 'bind' et ':checked'
OriginalL'auteur Floyd