2010-07-13 5 views
0

J'essaie de mettre en place une case à cocher qui vérifie toutes les cases à cocher de l'enfant, comme une arborescence. Les codes suivants fonctionnent très bien dans Firefox et Chrome, mais dans IE, il faut deux clics pour le faire fonctionner. Qu'est-ce que je rate?IE jquery prend deux clics pour travailler

HTML

<input type="checkbox" name="org" value="orgs" id="orgs" /> 
<label for="All">Organizations</label> 

<ul id="orglist"> 
    <li> 
      <input type="checkbox" name="org" value="1" id="1" /> 
      <label for="1">Org 1</label> 
    </li> 
    <li> 
      <input type="checkbox" name="org" value="1" id="2" /> 
      <label for="2">Org 2</label> 
    </li> 
</ul> 

Javascript/Jquery

$(document).ready(function() { 
    $("#orgs").change(function() { 

     if ($(this).attr("checked")) { 
      $("#navform #orglist :checkbox").attr("checked", true); 
     } 
     else { 
      $("#navform #orglist :checkbox").attr("checked", false); 
     } 
    }); 
}); 
+0

Ce n'est pas quelque chose avec l'option de sécurité IE "cliquez pour activer" "MS" ajouté, n'est-ce pas? – Andir

+0

Quelle version de IE est-elle affectée? fonctionne dans IE8 ici: http://jsfiddle.net/BX22n/ –

+0

@Nick: probablement 7 ou ci-dessous. IE8 a corrigé certains problèmes avec l'état de la case à cocher. – NotMe

Répondre

0

Très probablement l'état d'une case à cocher est dans le doute pour IE. Essayez de définir la propriété checked sur false ou autre sur le chargement initial de la page. Par exemple:

<input type="checkbox" name="or" value="1" id="1" checked="false" /> 
0

Au lieu de chercher un attribut, laissez jQuery faire plus de travail:

if ($(this).is(":checked")) { 
    $("#navform #orglist :checkbox").attr("checked", "checked"); 
} 
else { 
    $("#navform #orglist :checkbox").removeAttr("checked"); 
} 
+0

En fait cela devrait être '$ (" # navform #orglist: checkbox "). Attr (" vérifié ", this.checked);' si quelque chose (ou un '.each()'), ne laissez pas jQuery faire " plus de travail "utilisez les propriétés DOM plus rapides si elles sont disponibles, en général' $ (this) .is (": checked") 'est extrêmement inutile. [Il y a d'autres cas cela s'applique aussi bien] (http://stackoverflow.com/questions/3230727/jquery-optimization-best-practices/3230788#3230788) –

+0

J'apprends toujours sur l'optimisation de jQuery. Quel aspect est gaspillage ici? Est-ce en termes de millisecondes pour effectuer l'action et/ou est-ce en termes de mémoire ou de calculs nécessaires? Pouvez-vous me montrer des mesures réelles? – a7drew

1

Pour moi, le problème est que j'étais juste en utilisant checked et non checked="checked". Erreur muette, mais j'espère que ça aide quelqu'un.

Questions connexes