Une fonction fait planter mon script

Résolu/Fermé
lamouche - 12 juil. 2014 à 01:38
 Utilisateur anonyme - 12 juil. 2014 à 12:11
Bonjour,
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:

2 réponses

Utilisateur anonyme
12 juil. 2014 à 09:19
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.
0
Bonjour le père, effectivement ce système demande quelque amélioration, cependant j'aimerai comprendre pourquoi ma fonction addEvent pose problème, car je dois ajouter d'autre fonction a la suite de mon code, et quelque soit la fonction que j'ajoute, ça plante.
Sinon, le script est bien en fin de page.
0
Utilisateur anonyme
12 juil. 2014 à 11:45
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.
0
Saperlipopette, cette satanée virgule je ne l'avais pas vu, et pourtant elle creve les yeux.
Oui au fait, c'est event et pas addEvent
Bon merci bien, faudra que j'ouvre un peu plus les yeux la prochaine fois.
0
Utilisateur anonyme
12 juil. 2014 à 12:11
De rien :)
0