2012-04-24 11 views
97

considerar esta función:JavaScript llegar elemento por su nombre

function validate() 
{ 
    var acc = document.getElementsByName('acc').value; 
    var pass = document.getElementsByName('pass').value; 

    alert (acc); 
} 

Y esta parte HTML:

<table border="0" cellpadding="2" cellspacing="0" valign="top"> 
    <tr> 
     <td class="td1">Account</td> 
     <td class="td2"><input type="text" name="acc" /></td> 
    </tr> 
    <tr class="td1"> 
     <td>Password</td> 
     <td class="td2"><input type="password" name="pass" /></td> 
    </tr> 
</table> 
<div><button onClick="validate()" class="cupid-greenx">Login now</button></div> 

El cuadro de alerta está mostrando, pero muestra "indefinido".

+0

Si puede cambiarlo por completo, le recomiendo que agregue un campo "id" a sus dos campos de entrada, y use 'document.getElementById', que devuelve exactamente un valor. – Odi

+3

mejor aún: 'var inputs = document.getElementsByTagName ('input')', devuelve una lista de nodos, desde la que puede extraer ambos elementos de la siguiente manera: var pass = inputs.item ('pass'). Solo un consejo, esto puede acelerar las cosas si se trata de un gran DOM, ya que 'getElementById' buscará en todo el árbol cada vez, mientras que una lista de nodos no, por lo que es más rápido ... –

+0

Pequeño codigo de verdad XD –

Respuesta

179

document.getElementsByName devuelve un NodeList de elementos por lo que no tiene la propiedad .value. de ahí el error indefinido que está viendo.

Lo que queremos es document.getElementsByName("acc")[0].value

9

Quiere esto:

function validate() { 
    var acc = document.getElementsByName('acc')[0].value; 
    var pass = document.getElementsByName('pass')[0].value; 

    alert (acc); 
} 
+0

Gracias por usar el ejemplo del OP en su respuesta. –

+0

@KrisBoyd, la diferencia es que obtengo el primer elemento de la matriz devuelta por 'getElementsByName'. Tal vez debería haber dejado eso más claro; siéntete libre de editar si quieres. –

+0

Te estaba dando un complemento :) ninguna de las respuestas más altas lo forma en el mismo formato en el OP –

5
document.getElementsByName("myInput")[0].value; 
+1

Solo para ser claro: esto es obtener un elemento de una NodeList. :) –

21

Nota plural en este método:

document.getElementsByName() 

que devuelve una matriz de elementos, por lo que su uso [0] para obtener la primera ocurrencia, por ejemplo

document.getElementsByName()[0] 
+7

No es un array, es un NodeList :-) –

+1

@FlorianMargaine - En realidad es un [HTMLCollection] (https://developer.mozilla.org/en/DOM/HTMLCollection);) – j08691

+1

@ j08691 [nope] (https://developer.mozilla.org/en/DOM/document.getElementsByName) :) pero puede ser fácil de confundir: p –

5

Método document.getElementsByName devuelve una matriz de elementos. Debe seleccionar primero, por ejemplo.

document.getElementsByName('acc')[0].value 
+2

No es una matriz, es una NodeList :-) –

Cuestiones relacionadas