Rozważ tę funkcję:
function validate()
{
var acc = document.getElementsByName('acc').value;
var pass = document.getElementsByName('pass').value;
alert (acc);
}
A ta część 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>
Okno alertu jest wyświetlane, ale pokazuje „niezdefiniowane”.
javascript
html
dom
Juliver Galleto
źródło
źródło
document.getElementById
, które zwraca dokładnie jedną wartość.var inputs = document.getElementsByTagName('input')
:, zwraca listę węzłów, z której można wyodrębnić oba elementy, w ten sposób: var pass = inputs.item ('pass'). Właśnie cynk, prędkość ta może rzeczy w górę, jeśli masz do czynienia z dużym DOM, jakgetElementById
przeszuka całe drzewo za każdym razem, podczas gdy liście węzłów nie będzie, więc to szybciej ...Odpowiedzi:
Powodem, dla którego widzisz ten błąd, jest to, że
document.getElementsByName
zwraca aNodeList
z elementów. ANodeList
z elementów nie ma.value
właściwości.Użyj tego zamiast tego:
źródło
Zwróć uwagę na liczbę mnogą w tej metodzie:
To zwraca tablicę elementów, więc użyj [0], aby uzyskać pierwsze wystąpienie, np
źródło
length
nieruchomości, ale również brakuje wiele metod, takich jakmap
,forEach
itp co wyjaśnia, dlaczego musimy użyć:Array.prototype.forEach.call( NodeList, fn )
.Chcesz to:
źródło
getElementsByName
. Może powinienem był to wyjaśnić - jeśli chcesz, możesz edytować.Metoda document.getElementsByName zwraca tablicę elementów. Na przykład powinieneś najpierw wybrać.
źródło
źródło