2009-09-01 11 views
7

De acuerdo con SitePoint (y mis propios experimentos), la implementación de IE de "setAttribute()" es defectuosa y no confiable.¿Puedo usar JavaScript para establecer el atributo 'nombre'?

También según SitePoint, el atributo name es de solo lectura.

¿Hay alguna otra manera en que pueda establecer los atributos name en los elementos? Necesito esto para usar con botones de radio. Si es posible, me gustaría una solución sin jQuery, ya que actualmente no estoy usando la biblioteca.

¡Gracias de antemano!

+1

Sus puntos de referencia SitePoint a la propiedad nombre de un atributo no se oponen el nombre de un hotel fenomenal HTMLInputElement, es necesario comparar los huevos con huevos. – AnthonyWJones

Respuesta

4

Sitepoint lies está hablando de un uso diferente de 'name' (ver el comentario de Anthony). No es de solo lectura, es solo que hay un error de IE de larga data (hasta v7) donde la configuración de 'nombre' en los campos de formulario solo es parcialmente efectiva. Los botones de radio, en particular, no lo aceptan correctamente.

La solución respaldada por Microsoft, as detailed here es utilizar un misfeature horrible de la versión de IE de la llamada createElement para establecer los atributos al mismo tiempo:

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

Probablemente una mejor manera sería simplemente usar el bueno de innerHTML, por ejemplo .:

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

Esto parece INSERTAR el elemento en el dom, en lugar de establecer el atributo de nombre para mí. – Zoidberg

+1

* No puede * establecer el atributo de nombre en IE. Esto crea un nuevo elemento de radio, con el que puede reemplazar el elemento de radio existente si eso es lo que desea.Podrías configurar el innerHTML en el padre de la radio original, si eso es lo que buscas; no hay suficiente información en la pregunta para decir. – bobince

+0

Esta parece ser la única manera confiable de hacer esto en IE); –

0

La propiedad del nombre no se lee solo para los elementos de entrada.

Ver the spec.

+0

Puede que tengas razón, pero parece que no funciona en IE7. –

1

¿Ha intentado simplemente asignar un nuevo nombre a los elementos name propiedad? No estoy seguro de qué tan cruzado es ese navegador pero funciona con cualquier cosa que soporte el nivel DOM 1.

¿No estoy seguro de por qué usaría setAttribute para realizar esto?

+0

Publiqué un código que lo hace así y funcionó para mí. si hubiera visto esta respuesta primero, no la habría publicado. – Zoidberg

+0

Aún así, los fragmentos de código son agradables. – montrealist

9

Esto funcionó para mí

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

Con

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

Probado en IE6/7? – montrealist

+0

Funciona tanto en IE 7 como en la maravilla conocida como IE 6 – Zoidberg

+1

Funciona parcialmente. Sin embargo, no cambia el grupo de radio al que pertenece el botón, por lo que si tuvieras otra entrada llamada algún Nombre en la misma página, permanecerían independientes, y si tuvieras otra entrada llamada prueba, seguiría siendo exclusiva con el nuevo control someName. . Además, si intenta recuperar 'someName' utilizando getElementsByName, o form.someName/form.elements.someName, IE no puede encontrarlo. Puede haber más interacciones extrañas como esta; en general es mejor evitarlo. – bobince

0

IE DOM no me permite cambiar el atributo de nombre en el tiempo de ejecución. Sin embargo, al usar jQuery para actualizar , el atributo de nombre funciona en IE. Probé en IE9. Para ejemplos,

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