Considere esta função:
function validate()
{
var acc = document.getElementsByName('acc').value;
var pass = document.getElementsByName('pass').value;
alert (acc);
}
E 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>
A caixa de alerta está sendo exibida, mas mostra "indefinido".
javascript
html
dom
Juliver Galleto
fonte
fonte
document.getElementById
, que retorne exatamente um valor.var inputs = document.getElementsByTagName('input')
:, retorna um nodelist, do qual você pode extrair os dois elementos da seguinte maneira: var pass = inputs.item ('pass'). Apenas uma dica, esta velocidade pode as coisas se você está lidando com um grande DOM, comogetElementById
irá procurar toda a árvore de cada vez, enquanto um nodelist não vai, por isso é mais rápido ...Respostas:
A razão pela qual você está vendo esse erro é porque
document.getElementsByName
retorna umNodeList
dos elementos. E umNodeList
dos elementos não tem uma.value
propriedade.Use isso:
fonte
Observe o plural neste método:
Isso retorna uma matriz de elementos, então use [0] para obter a primeira ocorrência, por exemplo
fonte
length
propriedade, mas também está faltando um monte de métodos, tais comomap
,forEach
, etc. O que explica por que precisamos usar:Array.prototype.forEach.call( NodeList, fn )
.Você quer isso:
fonte
getElementsByName
. Talvez eu devesse ter deixado isso mais claro - fique à vontade para editar, se quiser.O método document.getElementsByName retorna uma matriz de elementos. Você deve selecionar primeiro, por exemplo.
fonte
fonte