Tout d'abord, jetons un coup d'œil à un exemple:
La copie de code est la suivante:
<form name = "acheterform" method = "post" action = "/ mysport / contrôle / user / list.do">
<input type = "checkbox" id = "nom d'utilisateur" value = "testtest"> testtest <br>
<input type = "checkbox" name = "usernames" value = "testtest"> testtest <br>
<input type = "text" id = "username" value = "testtest"> testtest <br>
</ form>
Document.Forms [0] Lorsqu'il existe un formulaire de formulaire ou des formulaires de formulaire multiple dans la page HTML, il renvoie un tableau de formulaire de type nodelist.
Document.Forms [0] .Usern noms, ici les noms d'utilisateur peuvent être la valeur de l'ID ou du nom, où ces deux attributs sont équivalents. De plus, il ne distingue pas si un composant est une zone de texte, une zone de radio ou une case à cocher.
Pour le moment, nous devons faire la distinction entre deux situations .
Lorsqu'un ID d'entrée ou un nom est «Noms d'utilisateur», Document.Forms [0] .Usernames Renvoie un composant d'entrée spécifique. S'il est utilisé, il doit être utilisé en fonction de la méthode de fonctionnement des composants spécifique.
À l'heure actuelle, alert (document.forms [0] .UseraMS.Length) renvoie non défini car le composant d'entrée n'a pas la propriété de longueur.
Lorsqu'il y a deux ID d'entrée ou plus ou noms «noms d'utilisateur», Document.Forms [0] .Usernames Renvoie le tableau Nodelist. À ce moment-là,
alert (document.forms [0] .Userames.length) renvoie la longueur du tableau. Dans l'exemple ci-dessus, la valeur de retour est 3.
Par conséquent, lorsque vous utilisez JS pour sélectionner tous, considérez la situation où il y a une et plusieurs cases de cocher du même nom.
La copie de code est la suivante:
fonction allSelect () {
var form = document.forms [0];
var state = form.allsellectbox.checked;
var longueur = form.userames.length; // Lorsqu'il y a deux noms de case à cocher qui sont des noms d'utilisateur, la longueur du tableau est renvoyée
// Lorsqu'il y a un nom de case à cocher qui est des noms d'utilisateur, Form.Usernames renvoie un objet à cocher, pas un tableau, donc sa propriété de longueur n'est pas définie
Si (longueur) {// en javascript, tant que la condition jugée est 0, nul ou indéfinie, elle est considérée comme fausse et que d'autres cas sont considérés comme vrai
pour (var i = 0; i <longueur; i ++) {
form.userames [i] .checked = state;
}
}
autre{
form.userames.checked = State;
}
}
Il existe un ID de composant des «noms d'utilisateur» ou plusieurs ID de composants sont des «noms d'utilisateur», Document.getElementById («Noms d'utilisateur») renvoie la valeur renvoyée par un composant de formulaire. Lorsque les ID de composants multiples sont des «noms d'utilisateur», le premier ID de composant est «Noms d'utilisateur».
Il existe un nom de composant «noms d'utilisateur» ou des noms de composants multiples «noms d'utilisateur», document.getElementsByName () renvoie le tableau htmlcollection. Remarquez la différence par rapport à document.getElementsByTagName (), qui obtient le tableau en fonction de la catégorie de balise.
var noms = document.getElementsByTagName ("noms d'utilisateur"), alert (noms [0]) Le résultat renvoyé ici n'est pas défini. J'avais l'habitude de mélanger ByName avec ByTagName, et aucune balise ne commence par des noms d'utilisateur. <nom d'utilisateur Value = ''> </serneraS> Cela n'existe pas.
Cependant, le retour de GetElementsByTagName est toujours une collection de tableaux, qui ne contient aucun contenu, les noms [0] n'existent pas, donc le retour n'est pas défini, car lorsque la plage de tableau est dépassée, la valeur non définie apparaît.
var test = {'0', '1', '2',}; alert (test [3]); Renvoie indéfini.