1 votes

La fonction jquery $ renvoie des résultats différents dans IE

$('.Schedule .Full input').each(function(i)
 {
        var controls = $('.Morning input, .MorningPart input, .Afternoon input, .AfternoonPart input', $(this).parents('.Schedule'));
        alert(controls.length + " Conflicting Controls\n"+
              $(this).parents('.Schedule').attr('id') + " Parent");
 });

Lorsque j'exécute ce code dans Firefox, la première exécution de cette fonction produit une boîte d'alerte indiquant ce qui suit :

17 Contrôles contradictoires
Lundi Parent

La même page exécutée dans IE 6 ou 7 produit une boîte d'alerte indiquant ce qui suit :

45 Contrôles contradictoires
Lundi Parent

Firefox a raison, il n'y a que 17 contrôles en conflit. Les 45 qu'IE identifie sont des contrôles qui ne sont pas des descendants de "Monday". Si j'ai spécifié "Lundi" comme contexte pour la fonction $(), pourquoi IE renvoie-t-il des contrôles en dehors de ce contexte ?

1voto

Corey Downie Points 2494

Faites-en l'essai

var controls = $(this).parents('.Schedule').children('.Morning input, .MorningPart input, .Afternoon input, .AfternoonPart input')

1voto

Adam Ritenauer Points 1003

J'ai modifié un peu votre exemple car ma structure est un peu différente

$(this).parents('.RadioSchedule').children('.Morning, .MorningPart, .Afternoon, .AfternoonPart').find('input');

cela a donné les mêmes résultats dans IE et Firefox.

1voto

Adam Ritenauer Points 1003
<div id="Monday" class="Schedule">
    <div class="Full">
        <div>
            <input type="radio" name="MondayFullDay" checked="checked" value="none"/>None 
        </div>
    </div>
</div>
<div id="Tuesday" class="Schedule">
    <div class="Full">
        <div>
            <input type="radio" name="TuesdayFullDay" checked="checked" value="none"/>None 
        </div>
    </div>
</div>

Ok, voici une autre partie délicate... On dirait que

$(this).parents('.Schedule');

renvoie de plus en plus de résultats au fur et à mesure de son exécution. Ainsi, lorsqu'elle est exécutée la première fois pour MondayFullDay, elle renvoie 1 résultat, mais lorsqu'elle arrive à TuesdayFullDay, elle renvoie 2 résultats. Cela ne se produit que dans IE.

Comme la structure xhtml ci-dessus n'est pas optionnelle pour cette application, j'ai fini par traverser manuellement le DOM par des appels successifs à .parent().

En changeant cela

$(this).parents('.Schedule');

Dans ce

$(this).parent().parent().parent();

Je suis toujours convaincu que la méthode parents() ne fonctionne pas comme indiqué dans la documentation...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X