2010-08-04 6 views
18

J'ai essayé de comprendre comment ajouter l'attribut "coché" à une case à cocher lors d'un clic. La raison pour laquelle je veux faire ceci est si je coche une case à cocher; Je peux faire en sorte que mon stockage local enregistre le code html. Lorsque la page est actualisée, la case à cocher est cochée. En ce moment, si je le coche, le parent s'estompe, mais si je le sauvegarde et le recharge, il reste fané mais la case n'est pas cochée.Ajouter l'attribut 'coché' au clic jquery

J'ai essayé de faire $ (this) .attr ('checked'); mais il ne semble pas vouloir ajouter vérifié.

EDIT: Après avoir lu les commentaires, il semble que je n'étais pas clair. Mon étiquette d'entrée par défaut est:

<input type="checkbox" class="done"> 

je besoin être top quand je clique sur la case à cocher, il ajoute: « vérifié » à la fin de cela. Ex:

<input type="checkbox" class="done" checked> 

je besoin de le faire quand je sauverai le code html pour le stockage local, quand il charge, il rend la case à cocher comme cochée.

$(".done").live("click", function(){ 
if($(this).parent().find('.editor').is(':visible')) { 
var editvar = $(this).parent().find('input[name="tester"]').val(); 
$(this).parent().find('.editor').fadeOut('slow'); 
$(this).parent().find('.content').text(editvar); 
$(this).parent().find('.content').fadeIn('slow'); 
} 
if ($(this).is(':checked')) { 
$(this).parent().fadeTo('slow', 0.5); 
$(this).attr('checked'); //This line 
}else{ 

$(this).parent().fadeTo('slow', 1); 
$(this).removeAttr('checked'); 
} 
}); 

Répondre

20

Il semble que ce soit l'une des rares occasions où l'utilisation d'un attribut est réellement appropriée. La méthode attr() de jQuery ne vous aidera pas car dans la plupart des cas (y compris celle-ci), elle définit une propriété, et non un attribut, rendant le choix de son nom un peu fou. [MISE À JOUR: Depuis jQuery 1.6.1, the situation has changed slightly]

IE a quelques problèmes avec la méthode DOM setAttribute mais dans ce cas, il devrait être bien:

this.setAttribute("checked", "checked"); 

Dans IE, ce sera toujours réellement faire la case cochée. Dans d'autres navigateurs, si l'utilisateur a déjà coché et décoché la case, la définition de l'attribut n'aura aucun effet visible.Par conséquent, si vous voulez garantir la case est cochée ainsi que d'avoir l'attribut checked, vous devez définir la propriété checked ainsi:

this.setAttribute("checked", "checked"); 
this.checked = true; 

Pour décocher la case à cocher et supprimer l'attribut, procédez comme suit:

this.setAttribute("checked", ""); // For IE 
this.removeAttribute("checked"); // For other browsers 
this.checked = false; 
+0

J'aime ce que vous avez ici , mais OP a demandé jQuery. Mais, +1 pour les js droits. Bon à savoir le noyau avant d'apprendre le cadre. – hookedonwinter

+0

Eh bien, je ne suis pas sûr que jQuery le fasse réellement. Peut-être tort cependant. –

+0

Merci pour votre aide, javascript directement est absolument bien avec moi, je venais d'utiliser jquery alors je me suis dit que je demanderais. Encore une fois, merci pour votre aide. – MoDFoX

28

$(this).attr('checked', 'checked')

juste attr('checked') renvoie la valeur d'attribut checked de $ (this). Pour le définir, vous avez besoin de ce deuxième argument. Basé sur <input type="checkbox" checked="checked" />

Edit:

D'après les commentaires, une manipulation plus appropriée serait:

$(this).attr('checked', true) 

Et une méthode javascript droit, plus approprié et efficace:

this.checked = true; 

Merci @Andy E pour cela.

+4

En raison de la façon dont les cartes jQuery attribue aux propriétés DOM, '$ (this) .attr ('checked', true);' est plus approprié. 'this.checked = true;' est encore plus approprié, étant plus efficace. –

+0

@ [Andy E] oh cool. Je ne le savais pas. éditer ma réponse pour réfléchir. – hookedonwinter

+0

@hookedonwinter: basé sur votre mise à jour, je pense que ce serait impoli de ne pas upvote;) +1. –

6

Si .attr() ne fonctionne pas pour vous (en particulier lors de la vérification et des boîtes décochant successivement), utilisez .prop() au lieu de .attr().

+0

Votre réponse est la meilleure (imho). La fonction .attr() ajoute simplement l'attribut, mais ne met pas à jour l'état de la case à cocher. .prop() - m'a aidé à résoudre mon problème. – Max

1

utiliser ce code

var sid = $(this); 
sid.attr('checked','checked'); 
Questions connexes