2012-01-13 55 views
8

El código para el segundo comando funciona de alerta según lo previsto (que muestra el valor del elemento "a", pero el primer comando de alerta no funciona (se supone que debe hacer la misma cosa). ¿Por qué es esto?¿Cómo usar document.getElementsByName() no está funcionando?

<html> 
<head> 
<script type="text/javascript"> 
function getValue() 
  { 
  alert(document.getElementsByName("to").value); 
    alert(document.forms[0].to.value);   
  } 
</script> 
</head> 
<body> 
<form> 
<input name="to" type="hidden" value="hoolah" /> 
<input type="button" onclick="getValue()" value="Get Value!" /> 
<form/> 
</body> 
</html> 

Respuesta

16

getElementsByName devuelve un HTMLCollection Se puede acceder al valor del primer elemento de la siguiente manera:.

document.getElementsByName("to").item(0).value 

O así:

document.getElementsByName("to")[0].value 

Más información:

+0

Demostración: http : //jsfiddle.net/LrD9q/ –

3

getElementsByName devuelve todos los elementos con el nombre dado. Esto significa que puede haber más de uno.

Si desea obtener el valor del primer elemento:

document.getElementsByName("to")[0].value 
0

Eso es porque pone el elemento (s) en una matriz, probar este ejemplo en su lugar:

function getValues(objName) 
{ 
    var arr = new Array(); 
    arr = document.getElementsByName(objName); 

    alert("total objects with name \"textfield\" = \n" + arr.length); 

    for(var i = 0; i < arr.length; i++) 
    { 
     var obj = document.getElementsByName(objName).item(i); 
     alert(obj.id + " = " + obj.value); 
    } 
} 
+2

No he votado negativamente, pero aunque su respuesta está cerca, no está del todo bien. En primer lugar, '.getElementsByName()' devuelve una 'HTMLCollection', que es similar a una matriz, pero no una matriz real. En segundo lugar, no debe inicializar su variable 'arr' en una nueva matriz porque inmediatamente la sobreescribe con el valor devuelto por' .getElementsByName() '(no coloca el resultado en la matriz, descarta la matriz). En tercer lugar, ¿por qué estás llamando '.getElementsByName()' de nuevo en cada iteración de tu ciclo for? – nnnnnn

+0

Si solo quieres iterar sobre él, entonces sí, la propiedad '.length' y la notación' [] 'array te permitirán tratarlo como una matriz. Pero el código en su respuesta utiliza el método '.item()', que no es un método de matriz. Y _real_ arrays tienen muchos otros métodos, como '.sort()', '.join()', etc. – nnnnnn

Cuestiones relacionadas