Variable de Javascript en el nombre del elemento
Frecuentes
Visto 3,477 veces
1
Tengo un cuadro de texto y un cuadro de selección con opciones que son las mismas que las columnas de una tabla. Quiero poder escribir en el cuadro, seleccionar una columna, presionar un botón y hacer que copie lo que esté en el cuadro, en cada cuadro de la columna. Estoy teniendo dificultades con la sintaxis ya que usar una variable es lo único que evita que esto funcione. Cuando pongo valores reales, funciona bien.
function testScript(fill) {
choice=document.form1.column.value;
alert (fill);
alert (choice);
for($i=0;$i<fill;$i++){
document.form1.choice[$i].value=document.form1.copy.value;
}
}
Fill (probado por la alerta) me proporciona el número de filas en la tabla y funciona bien. La elección es mi cuadro de selección (desplegable). Si escribo "document.form1.make[$1].value=, llena lo que escribo en cada fila de la columna make. Si elijo make en el cuadro de selección, la opción dice make como lo indica mi alerta de prueba.
¿Alguna idea de cómo usar la variable correctamente en el ciclo for?
2 Respuestas
4
Si te entiendo bien, la sintaxis que buscas es:
document.form1[choice][$i].value=document.form1.copy.value;
En sentido general, para acceder a una propiedad "prop1" de un objeto obj
puede utilizar dos sintaxis:
obj.prop1
// or
obj["prop1"]
Con la sintaxis de corchetes, puede usar cualquier expresión siempre que se evalúe como una cadena que es el nombre de la propiedad que desea, por lo que:
var x = "prop1";
obj[x]
// or
var x = "pr", y = "op1";
obj[x + y]
...ambos van a acceder a la misma propiedad que obj.prop1
.
Tenga en cuenta también que debe declarar su choice
y $i
variables con el var
palabra clave (como en mis ejemplos) o se convertirán global variables.
respondido 10 mar '12, 10:03
0
function testScript(fill) {
choice=document.form1.column.value+'[]';
for($i=0;$i<fill;$i++){
document.form1.elements[choice][$i].value=document.form1.copy.value;
}
}
Actualizado
ver muestra aquí: enlace jsfiddle
respondido 11 mar '12, 10:03
Intenté tu sugerencia, pero no funciona. He probado muchas otras variaciones también. ¿Crees que necesito un enfoque diferente para el problema o estás seguro de que esto es posible? Parece la mejor manera, pero estoy seguro. - Brian
lo siento, he actualizado el código. Creo que esto es lo que necesitabas - diablo rojo
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas javascript or haz tu propia pregunta.
Creo que me entendiste bien, sin embargo ya había probado tu sugerencia y lamentablemente no funciona. No estoy seguro de qué más probar. - Brian