Maison >interface Web >js tutoriel >Pourquoi les noms de fonctions JavaScript entrent-ils parfois en conflit avec les ID d'éléments ?
Dans le domaine du développement JavaScript, un problème déroutant survient lorsque les noms de fonctions entrent en conflit avec les ID d'élément . Cette requête approfondit les raisons sous-jacentes et explore les restrictions et les implications de tels conflits.
Considérons l'exemple suivant :
<script> function border(border) { alert(border); } </script> <select>
Dans le premier violon , ce code alerte avec succès la valeur de l'option sélectionnée. Cependant, dans le deuxième cas, en utilisant un élément de formulaire (avec un formulaire entourant la sélection), le code échoue avec l'erreur "la bordure n'est pas une fonction".
Cette divergence provient d'un problème hérité de JavaScript, où la chaîne de portée des valeurs d'attribut du gestionnaire d'événements inclut l'objet Form englobant. Cet objet Form possède des propriétés représentant les noms de ses contrôles enfants, y compris l'élément border select.
Ainsi, lorsque l'on fait référence à border comme fonction dans le gestionnaire d'événements dans le contexte du formulaire :
<form><… name="border" onchange='border(this.value)' …></form>
Cela équivaut à appeler form.border(this.value), qui fait référence à la propriété de l'objet Form au lieu de la fonction prévue.
La spécification du langage JavaScript n'interdit pas explicitement les conflits de noms entre les fonctions et les ID d'éléments. Cependant, la liaison HTML DOM niveau 2 spécifie que les HTMLCollections (y compris les formulaires et leurs contrôles) sont accessibles par nom ou ID en utilisant la syntaxe entre crochets.
Cela implique que :
L'utilisation du même identifiant pour un élément et une fonction peut :
Pour éviter ces problèmes, pensez à suivre ces directives :
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!