Lors de la définition d'une fonction JavaScript portant le même nom que l'ID d'un élément, des erreurs inattendues peuvent se produire. Cet article étudie la raison sous-jacente de ce conflit et explore toutes les spécifications ou restrictions JavaScript concernant de telles situations.
JavaScript présente un problème de chaîne de portée hérité qui découle de ses premières versions (1.0 à 1.3 ). Dans la valeur de l'attribut du gestionnaire d'événements d'un contrôle de formulaire qui fait partie d'un formulaire, l'objet Form représentant le formulaire devient accessible en tant qu'objet deuxième suivant dans la chaîne de portée, tandis que l'objet de contrôle de formulaire lui-même est le deuxième suivant.
L'objet Form possède des propriétés représentant les noms de ses contrôles de formulaire contenus. Cela permet d'accéder à un objet de contrôle de formulaire en utilisant la syntaxe suivante :
myForm.border
Il s'agit d'un raccourci pour la syntaxe conforme aux normes :
document.forms["myForm"].elements["border"]
Par conséquent, lors de l'utilisation de la syntaxe d'un contrôle de formulaire name dans la valeur d'un attribut de gestionnaire d'événements, cela équivaut à référencer la propriété correspondante de l'objet Form. Si le nom de ce contrôle de formulaire correspond à une fonction définie par l'utilisateur, cela conduit à l'exécution de l'objet de contrôle de formulaire, qui n'est pas appelable. Cela provoque l'erreur "TypeError : [nom de la fonction] n'est pas une fonction."
La spécification HTML DOM niveau 2, qui a standardisé les implémentations DOM existantes, a introduit des caractéristiques. Il a spécifié que les éléments de HTMLCollections sont accessibles par nom ou par ID en utilisant la syntaxe d'accesseur de propriété entre crochets [...].
Dans le contexte des formulaires et des contrôles de formulaire, cela a étendu la méthode d'accès pour inclure des éléments avec Les pièces d'identité également. Par conséquent, le conflit susmentionné est devenu applicable aux éléments avec des ID, entraînant la même erreur lorsque le nom de la fonction entre en conflit avec l'ID de l'élément.
Comprendre ce problème hérité nécessite une connaissance de l'évolution historique de JavaScript et son influence sur l'API DOM. Le respect des meilleures pratiques, comme éviter les conflits de noms entre les contrôles de formulaire et les fonctions ou l'utilisation d'ID, peut atténuer ce problème et éviter des erreurs inattendues.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!