2009-09-01 8 views
7

Nach SitePoint (und meinen eigenen Experimenten) ist die IE-Implementierung von "setAttribute()" fehlerhaft und unzuverlässig.Kann ich JavaScript verwenden, um das 'name' Attribut zu setzen?

Auch gemäß SitePoint ist das Attribut name schreibgeschützt.

Gibt es eine andere Möglichkeit, die name Attribute auf Elemente zu setzen? Ich brauche das für die Verwendung mit Radiobuttons. Wenn möglich, möchte ich eine Lösung ohne jQuery, da ich die Bibliothek derzeit nicht verwende.

Vielen Dank im Voraus!

+1

Ihre Sitepoint Referenzpunkte auf den Namen Eigenschaft eines Attributs nicht den Namen propery eines Htmlinputelement-Objekt, müssen Sie Eier mit Eiern vergleichen. – AnthonyWJones

Antwort

4

Sitepoint liegt spricht über eine andere Verwendung von "Name" (siehe Anthony's Kommentar). Es ist nicht schreibgeschützt, es ist nur ein langjähriger IE-Bug (bis zu v7), bei dem das Setzen von 'name' in Formularfeldern nur teilweise effektiv ist. Insbesondere Radio-Buttons akzeptieren dies nicht richtig.

Die Microsoft-endorsed Lösung, as detailed here ist eine schreckliche misfeature von IE-Version des create Aufrufs zu verwenden, um Attribute zur gleichen Zeit einzustellen:

var radio= document.createElement('<input type="radio" name="test" value="a" />'); 

Eine bessere Methode einfach alt zu verwenden wäre gut innerHTML-, zB .:

var div= document.createElement('div'); 
div.innerHTML= '<input type="radio" name="test" value="a" />'; 
var radio= div.firstChild; 
+1

Das sieht so aus, als würde ich das Element in das dom einfügen, anstatt das name-Attribut auf mich zu setzen. – Zoidberg

+1

Sie * können das Namensattribut in IE nicht festlegen. Dadurch entsteht ein neues Funkelement, mit dem Sie das vorhandene Funkelement ersetzen können, wenn Sie das möchten.Sie können das innerHTML auf das Parent des ursprünglichen Radios einstellen, wenn Sie danach suchen. Es gibt nicht genug Informationen in der Frage zu sagen. – bobince

+0

Dies scheint der einzige zuverlässige Weg, dies in IE zu tun); –

0

Die name-Eigenschaft wird nicht nur für Eingabeelemente gelesen.

Siehe the spec.

+0

Sie können Recht haben, aber es scheint nicht in IE7 zu arbeiten. –

1

Haben Sie versucht, den Elementen einfach einen neuen Namen zuzuweisen name Eigenschaft? Ich bin mir nicht sicher, wie Cross-Browser das ist, aber es funktioniert mit allem unterstützen DOM Level 1.

Ich bin mir nicht sicher, warum Sie SetAttribute verwenden würde, um dies durchzuführen?

+0

Ich habe einen Code gepostet, der es so macht und für mich funktioniert hat. Wenn ich diese Antwort zuerst gesehen hätte, hätte ich sie nicht gepostet. – Zoidberg

+0

Noch sind Codeausschnitte nett. – montrealist

9

Dieser arbeitete für mich

alert(document.getElementById('testInput').name); 
document.getElementById('testInput').name = 'someName'; 
alert(document.getElementById('testInput').name); 

Mit

<input type="radio" name="test" id="testInput" /> 
+0

Getestet in IE6/7? – montrealist

+0

Funktioniert sowohl in IE 7 und das Wunder bekannt als IE 6 – Zoidberg

+1

Es funktioniert teilweise. Die Funkgruppe, zu der die Schaltfläche gehört, wird jedoch nicht geändert. Wenn Sie also eine andere Eingabe namens someName auf derselben Seite hätten, würden sie unabhängig bleiben. Wenn Sie eine andere Eingabe mit dem Namen test hätten, wäre sie immer noch exklusiv für das neue someName-Steuerelement . Wenn Sie versuchen, 'someName' mit getElementsByName oder form.someName/form.elements.someName abzurufen, kann der IE sie jedoch nicht finden. Es mag mehr seltsame Interaktionen wie diese geben; im Allgemeinen ist es am besten zu vermeiden. – bobince

0

IE DOM erlaubt mir nicht, Namensattribut zur Laufzeit zu ändern. Mit jQuery zu aktualisieren das Namensattribut funktioniert jedoch auf IE. Ich habe auf IE9 getestet. Beispiele,

<input id="ID0E2B" name="Field2" value="3" type="radio" /> 
$("#ID0E2B").attr("name", newName); 
Verwandte Themen