IE6 non cambiare gli attributi (id e nome) con la chiamata attr jQuery - qualche suggerimento?

StackOverflow https://stackoverflow.com/questions/2202389

Domanda

Suggerimenti altro che il dumping IE6 che è ... non riesco a controllare che:)

sinossi rapida di quello che sto cercando di fare: Ho una forma con alcuni elementi. Quando l'utente seleziona una specifica opzione nella selezione (tipo2 id nel codice qui sotto), visualizzo una struttura div che contiene una nuova selezione. Voglio che la nuova struttura div ed i suoi bambini di essere un clone di uno (pdProgramDiv1 id) esistente perché io uso php per popolare il selezionare nel div. Una volta che il select viene clonato, ho bisogno di cambiare id del clone e il nome del div e la sua etichetta bambino e selezionate perché le informazioni modulo è sempre passata al mio inviare script php. Se non hanno ID univoci, quindi anche se sono serializzati in stringa di query, l'array $ _POST in php include solo l'ultimo valore di un dato id.

Ho incluso il codice che funziona assolutamente perfettamente in Firefox sospiro , e non riesce a modificare gli ID ei nomi in IE6. Questo codice non può essere il più conciso come alcuni; Sono ancora abbastanza nuovo per 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();
    }
}); 

Ho guardato in giro, e provato a utilizzare le variabili invece di concatenamento, e le singole chiamate attr invece di usare l'oggetto letterale (o mappa), ma niente aiuta. Tutte le variazioni funzionano bene in FF, ma nessuna gioia in IE6.

Si tratta di un problema noto, o qualcuno può dirmi modo per fare i cambiamenti accadere?

Se non riesco a far funzionare tutto questo, credo che dovrò creare tutti gli elementi e nasconderli, ma che non sembra così buono.

Grazie in anticipo come sempre!

UPDATE: RISOLTO

Grazie tanto alla gente che ha trovato l'errore dei miei modi. Ho voluto pubblicare il codice che finire la soluzione del problema. Come ho detto nel mio commento alla risposta accettato di sotto, la correzione ha perfettamente senso. Un po 'imbarazzato, non l'ho visto, ma a volte è necessario un paio di occhi freschi! L'unico cambiamento è con la selezione del bambino di selezione piuttosto che il selezionare ID, e rimuovendo l'assegnazione del nome attr su div, perché, come detto, non si fa nulla.

$('#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();
    }
}); 
È stato utile?

Soluzione

Credo problema è qui ...

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

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

Si sta clonando il contenitore, il passaggio è ID, e inserendolo di nuovo nella pagina. I contenitori vanno bene, ma la pagina ora cotnains due elementi ha identificato # pdProgram1. document.getElementById non sta andando come questo.

refactoring del codice per cercare l'elemento di selezione per la sua etichetta, invece di dal suo ID.

Altri suggerimenti

Credo che hai appena si è schiantato in un problema con IE6, perché gestisce male la clonazione del nodo, se non del tutto. Non riesce proprio che fissa il nome e l'id degli elementi clonned ...

Maggiori informazioni qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top