Question

Suggestions autre que le dumping IE6 qui est ... Je ne peux pas contrôler que:)

synopsis de ce que je suis en train de faire: je forme avec des éléments sélectionnés. Lorsque l'utilisateur sélectionne une option spécifique dans la sélection (id type2 dans le code ci-dessous), je montre une structure de div qui contient une nouvelle sélection. Je veux que la nouvelle structure div et ses enfants à être un clone d'un un (id pdProgramDiv1) existant parce que j'utilise php pour remplir la sélection dans la div. Une fois que la sélection est clonée, je dois changer l'ID du clone et le nom du div et son étiquette enfant et sélectionnez parce que l'information de formulaire est transmis à mon se soumettre script php. Si elles ne sont pas ids uniques, alors même si elles sont sérialisés dans la chaîne de requête, le tableau $ _POST en php ne comprend que la dernière valeur d'un identifiant donné.

J'ai inclus le code qui fonctionne absolument parfaitement dans Firefox soupir , et ne parvient pas à changer les ids et les noms dans IE6. Ce code peut ne pas être aussi concis que certains; Je suis encore assez nouveau pour jQuery.

$('#type2').change(function() {
    if ($('#type2 option:selected').text() == 'Program Director') {
        $('#pdProgramDiv1').clone().attr({id: 'pdProgramDiv2', name: 'pdProgramDiv2'}).appendTo($('#type2Div'));

        $('#pdProgramDiv2 > #pdProgram1').attr({id: 'pdProgram2', name: 'pdProgram2'});

        $('#pdProgramDiv2 > label').attr('for', 'pdProgram2');
    } else {
        $('#pdProgramDiv2').hide();
    }
}); 

J'ai regardé autour, et essayé d'utiliser des variables plutôt que enchaînant et les appels individuels attr plutôt que d'utiliser l'objet littéral (ou la carte), mais rien n'aide. Toutes les variations fonctionnent très bien dans FF, mais pas de joie dans IE6.

Est-ce un problème connu, ou quelqu'un peut me dire façon de faire les changements se produisent?

Si je ne peux pas obtenir ce travail, je suppose que je vais devoir créer tous les éléments et les cacher, mais cela ne semble pas aussi bon.

Merci à l'avance, comme toujours!

UPDATE: SOLVED

Merci beaucoup aux gens qui ont trouvé l'erreur de mes moyens. Je voulais poster le code qui se termine par résoudre le problème. Comme je l'ai dit dans mon commentaire à la réponse acceptée ci-dessous, la solution est parfaitement logique. Un peu gênées je ne l'ai pas vu, mais parfois une nouvelle paire d'yeux est nécessaire! Le seul changement est à la sélection de l'enfant sélectionnez plutôt que la sélection ID et supprimer le nom de l'affectation attr sur div, parce que mentionné précédemment, il ne fait rien.

$('#type2').change(function() {
    if ($('#type2 option:selected').text() == 'Program Director') {
        $('#pdProgramDiv1').clone()
            .attr('id', 'pdProgramDiv2')
            .appendTo($('#type2Div'));

        $('#pdProgramDiv2 > select').attr({
             id: 'pdProgram2', 
             name: 'pdProgram2'});

        $('#pdProgramDiv2 > label').attr('for', 'pdProgram2');
    } else {
        $('#pdProgramDiv2').hide();
    }
}); 
Était-ce utile?

La solution

Je pense que vous problème ici ...

$('#type2').change(function() {
    /* snip */
        $('#pdProgramDiv1').clone().attr({id: 'pdProgramDiv2', name: 'pdProgramDiv2'}).appendTo($('#type2Div'));

        $('#pdProgramDiv2 > #pdProgram1').attr({id: 'pdProgram2', name: 'pdProgram2'});
    /* snip */
});

Vous clonant le conteneur, il est commutation ID, et l'insérer de nouveau dans la page. Les conteneurs sont très bien, mais la page cotnains maintenant deux éléments # pdProgram1 a identifié. document.getElementById ne va pas comme ça.

Refactoriser le code pour rechercher l'élément de sélection par son étiquette au lieu de par son ID.

Autres conseils

Je crois que vous venez de crashé dans un problème avec IE6, car il gère mal le clonage de noeud, le cas échéant. Elle échoue précisément sur la fixation du nom et identifiant des éléments clonned ...

Plus d'infos ici .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top