Variable de Javascript en el nombre del elemento

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?

preguntado el 10 de marzo de 12 a las 09:03

2 Respuestas

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

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

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 or haz tu propia pregunta.