IE6 ändern Attribute (ID und Name) nicht mit JQuery Attr Call - irgendwelche Vorschläge?

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

Frage

Vorschläge andere, dass das Dumping IE6 das ist ... ich kann das nicht kontrollieren :)

Schnelle Zusammenfassung dessen, was ich versuche zu tun: Ich habe ein Formular mit ausgewählten Elementen. Wenn der Benutzer eine bestimmte Option im Auswählen auswählt (ID -Typ 2 im folgenden Code), zeige ich eine DIV -Struktur an, die eine neue Auswahl enthält. Ich möchte, dass die neue DIV -Struktur und ihre Kinder ein Klon eines vorhandenen (ID pdProgramdiv1) sind, da ich PHP verwende, um die Auswahl im Div zu füllen. Sobald die Auswahl kloniert ist, muss ich die ID und den Namen des Klons des DIV und des untergeordneten Etiketts ändern und auswählen, da die Formularinformationen an mein PHP -Skript übergeben werden. Wenn sie keine eindeutigen IDs haben, enthält das $ _post -Array in PHP, obwohl sie in die Abfragebarstellung serialisiert werden, nur den letzten Wert einer bestimmten ID.

Ich habe den Code aufgenommen, der absolut perfekt in Firefox funktioniert seufzen, und kann die IDs und Namen in IE6 nicht ändern. Dieser Code ist möglicherweise nicht so prägnant wie einige; Ich bin immer noch ziemlich neu in 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();
    }
}); 

Ich habe mich umgesehen und versucht, Variablen zu verwenden, anstatt zu verketten, und einzelne Aufrufe von Attr nutzen, anstatt das Objektliteral (oder die Karte) zu verwenden, aber nichts hilft. Alle Variationen funktionieren in FF gut, aber keine Freude an IE6.

Ist dies ein bekanntes Problem oder kann mir jemand sagen, wie ich die Änderungen erfüllen kann?

Wenn ich das nicht zum Laufen bringen kann, muss ich wohl alle Elemente erstellen und sie verbergen, aber das scheint nicht so gut zu sein.

Vielen Dank im Voraus wie immer!

Update: Gelöst

Vielen Dank an die Leute, die den Fehler meiner Wege gefunden haben. Ich wollte den Code veröffentlichen, der das Problem löst. Wie ich in meinem Kommentar auf die akzeptierte Antwort unten sagte, macht das Fix durchaus sinnvoll. Ein bisschen verlegen, dass ich es nicht gesehen habe, aber manchmal ist ein frisches Paar Augen gebraucht! Die einzige Änderung ist die Auswahl des untergeordneten Auswahl und die Auswahl der Auswahl -ID und das Entfernen der Namenszuweisung auf DIV, da sie, wie erwähnt, nichts tut.

$('#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();
    }
}); 
War es hilfreich?

Lösung

Ich denke, Sie Problem sind hier ...

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

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

Sie klonen den Container, wechseln seine ID und setzen ihn wieder in die Seite ein. Die Container sind in Ordnung, aber die Seite Cotnains Two Elements id #pdprogram1. document.getElementById wird das nicht mögen.

Refactor den Code, der nach dem Auswahlelement nach seinem Tag anstelle seiner ID sucht.

Andere Tipps

Ich glaube, Sie haben gerade in einem Problem mit IE6 abgestürzt, weil es das Klonen des Knotens schlecht behandelt, wenn überhaupt. Es scheitert genau, den Namen und die ID der klonen Elemente zu beheben ...

Mehr Info hier.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top