Une fonction fait planter mon script
Résolu
lamouche
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je débute en JS et j'ai le problème que voici:
Le script fonctionne très bien sans la fonction addEvent, par contre dés que j'ajoute cette fonction, le script plante.
Je ne comprend pas pourquoi cette fonction affecte le reste du code.
Un grand merci à qui pourra m'aider.
Je débute en JS et j'ai le problème que voici:
var imp = document.getElementsByTagName('input'), span = document.getElementsByTagName('span'), z = {}; function makeListener(i) { return function(e) { if(e.target.value.length < 2) { e.target.id = 'faux'; span[i].id = 'spanFaux'; span[i].innerHTML = 'Votre champ doit faire plus de 2 caractères'; } else if(e.target.value.length > 2) { e.target.id = 'juste'; span[i].id = 'spanJuste'; span[i].innerHTML = 'Le champs est correctement remplis'; } } } for(var i=0; i<imp.length; i++) { imp[i].addEventListener('keyup', makeListener(i), false); } function event(element, event, func, ) { element.addEventListener(event, func, true); }
Le script fonctionne très bien sans la fonction addEvent, par contre dés que j'ajoute cette fonction, le script plante.
Je ne comprend pas pourquoi cette fonction affecte le reste du code.
Un grand merci à qui pourra m'aider.
A voir également:
- Une fonction fait planter mon script
- Fonction si et - Guide
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Fonction miroir - Guide
2 réponses
Bonjour
Chez moi ça marche bien, à condition de retirer la fonction event qui visiblement ne lui plaît pas.
Bien sûr, il faut que le script ne soit exécuté qu'à la fin de la page, quand les <input> et les <span> sont définis. Tu peux soit le mettre à la fin de la page, soit englober le tout dans une fonction qui est appelée par l'événement onload de <body>, par exemple.
Tu devrais aussi (même si ça marche comme ça) supprimer tes e.target.id = 'faux'; et autres span[i].id = 'spanFaux'; : je ne vois pas à quoi ça sert de modifier l'id d'un élément, et avec ce que tu as fait tu vas donner le même id à plusieurs éléments, ce qui est interdit.
Si c'est pour mémoriser le résultat du test comme je le suppose, tu peux créer un tableau à part ou ajouter une propriété, par exemple : e.target.verif = 'faux'; span[i].verif = 'spanFaux';
Enfin, ton système, même s'il est astucieux au départ, a un gros inconvénient si tu ne l'améliores pas : tu ne peux plus utiliser de balise span ailleurs dans ta page. Du moins, pas avant le formulaire. Ça risque d'être gênant.
Chez moi ça marche bien, à condition de retirer la fonction event qui visiblement ne lui plaît pas.
Bien sûr, il faut que le script ne soit exécuté qu'à la fin de la page, quand les <input> et les <span> sont définis. Tu peux soit le mettre à la fin de la page, soit englober le tout dans une fonction qui est appelée par l'événement onload de <body>, par exemple.
Tu devrais aussi (même si ça marche comme ça) supprimer tes e.target.id = 'faux'; et autres span[i].id = 'spanFaux'; : je ne vois pas à quoi ça sert de modifier l'id d'un élément, et avec ce que tu as fait tu vas donner le même id à plusieurs éléments, ce qui est interdit.
Si c'est pour mémoriser le résultat du test comme je le suppose, tu peux créer un tableau à part ou ajouter une propriété, par exemple : e.target.verif = 'faux'; span[i].verif = 'spanFaux';
Enfin, ton système, même s'il est astucieux au départ, a un gros inconvénient si tu ne l'améliores pas : tu ne peux plus utiliser de balise span ailleurs dans ta page. Du moins, pas avant le formulaire. Ça risque d'être gênant.
pourquoi ma fonction addEvent pose problème
Quelle fonction addEvent ? tu n'as aucune fonction avec ce nom là.
Ce qui pose un problème, c'est ta fonction event. Comme l'indique la console javascript, il y a un "unexpected token )" sur la ligne "function event(element, event, func, )"
Effectivement, il s'attend à un paramètre après la virgule qui suit func. Enlève cette virgule, tout va marcher.
Quelle fonction addEvent ? tu n'as aucune fonction avec ce nom là.
Ce qui pose un problème, c'est ta fonction event. Comme l'indique la console javascript, il y a un "unexpected token )" sur la ligne "function event(element, event, func, )"
Effectivement, il s'attend à un paramètre après la virgule qui suit func. Enlève cette virgule, tout va marcher.
Sinon, le script est bien en fin de page.