Primero, echemos un vistazo a un ejemplo:
La copia del código es la siguiente:
<Form name = "BuyerForm" Method = "Post" Action = "/MySport/Control/User/List.do">
<input type = "checkbox" id = "usernames" value = "testtest"> testtest <br>
<input type = "checkbox" name = "usernames" value = "testtest"> testtest <br>
<input type = "text" id = "usernames" value = "testtest"> testtest <br>
</form>
document.forms [0] Cuando hay un formulario de formulario o múltiples formularios de formulario en la página HTML, devuelve una matriz de formulario del tipo Nodelist.
document.forms [0]. UserNames, aquí los nombres de usuario pueden ser el valor de ID o nombre, donde estos dos atributos son equivalentes. Además, no distingue si un componente es un cuadro de texto, un cuadro de radio o una casilla de verificación.
En este momento, necesitamos distinguir entre dos situaciones .
Cuando una ID o nombre de entrada es 'UserNames', document.forms [0]. UserNames devuelve un componente de entrada específico. Si se opera, debe usarse de acuerdo con el método de operación de componente específico.
En este momento, alerta (document.forms [0] .usernames.length) devuelve indefinido porque el componente de entrada no tiene la propiedad de longitud.
Cuando hay dos o más ID de entrada o nombre de 'nombre de usuario', document.forms [0]. UserNames devuelve la matriz Nodelist. En este momento
alerta (document.forms [0] .Usernames.length) devolverá la longitud de la matriz. En el ejemplo anterior, el valor de retorno es 3.
Por lo tanto, cuando use JS para seleccionar todo, considere la situación en la que hay una y múltiples casillas de verificación del mismo nombre.
La copia del código es la siguiente:
función allSelect () {
var form = document.forms [0];
var state = form.allselectbox.ecked;
Var longitud = form.usernames.length; // Cuando hay dos o más nombres de casilla de verificación que son nombres de usuario, la longitud de la matriz se devuelve
// Cuando hay un nombre de casilla de verificación que es nombre de usuario, form.usernames devuelve un objeto de casilla de verificación, no una matriz, por lo que su propiedad de longitud está indefinida
if (longitud) {// en JavaScript, siempre que la condición juzgada sea 0, nula o indefinida, se considera falso y otros casos se consideran verdaderos
para (var i = 0; i <longitud; i ++) {
form.usernames [i] .ecked = state;
}
}
demás{
form.usernames.ecked = state;
}
}
Hay una ID de componente de 'nombre de usuario' o múltiples ID de componentes son 'nombre de usuario', document.getElementById ('usernames') devuelve el valor devuelto por un componente de formulario. Cuando las ID de componentes múltiples son 'nombres de usuario', la primera ID de componente es 'Nombes de usuario'.
Hay un nombre de componente 'nombre de usuario' o nombres de múltiples componentes 'nombre de usuario', document.getElementsByName () devuelve la matriz HTMLCollection. Tenga en cuenta la diferencia de document.getElementsBytagName (), que obtiene la matriz de acuerdo con la categoría de etiqueta.
Var nombres = document.getElementsBytagName ("UserNames"), alerta (nombres [0]) El resultado devuelto aquí está indefinido. Solía mezclar byname con bytagname, y ninguna etiqueta comienza con los nombres de usuario. <usernames value = ''> </sserernames> Esto no existe.
Sin embargo, la devolución de GetElementsBytagName sigue siendo una colección de matriz, que no contiene ningún contenido, los nombres [0] no existe, por lo que la devolución no está definida, porque cuando se excede el rango de matriz, aparece el valor indefinido.
var test = {'0', '1', '2',}; alerta (test [3]); Devuelve indefinido.