Formulaire interactif

keurdange Messages postés 816 Statut Membre -  
keurdange Messages postés 816 Statut Membre -
Bonjour,

Comme le titre l'indique, j'aimerais faire un formulaire interactif mais je crois que j'ai un problème sur la fonction getAttention censée récupérer les spans avec les messages d'erreur.

Voici mon HTML

<div id="ligne"><div id="colonne"><label for="nom">Votre nom *</label></div><div id="colonne">
<input type="texte" name="nom" id="nom" maxlength="30" placeholder="Maximum de caractère 30" size="33" required />
</div><div id="colonne"><span class="attention">Veuillez entrer un nom valide</span></div></div>

les id=ligne et id=colonne gèrent la mise en page sous forme de tableau sur le css.

Voici le javascript pour le formulaire interactif

function desactiveAttentions()
{
var spans=document.getElementsByTagName('span'),
spansLenth=spans.length,i;
for(i=0;i<spansLenth;i++)
{
if(spans[i].className=='attention')
spans[i].style.display='none';
}
}
function getAttention(element)
{
while(element=element.nextSibling)
{
if(element.className==='attention')
{
return element;
}
}
return false;
}
var verification={};

verification['nom']=function(id) {
var nom=document.getElementById(id),
attentionStyle=getAttention(nom).style;
if(nom.value.length>=10)
{
nom.className='correct';
attentionStyle.display='none';
return true;
}
else
{
nom.className='incorrecte';
attentionStyle.display='inline-block';
return false;
}

};
(function()
{
var accueil_form=document.getElementById('accueil_form'),
inputs=document.getElementsByTagName('input'),
inputsTaille=inputs.length;
for(var i=0;i<inputsTaille;i++)
{
if(inputs[i].type=='text' || inputs[i].type=='password')
{
inputs[i].onkeyup=function() {
verification[this.id](this.id);
};
}
}
})();

desactiveAttentions();

j'ai essayé différente manière depuis plus de 3 jours mais je suis toujours coincé à la fonction getAttention (car selon moi, je pense que le problême viendrait de là bas car l'erreur sur le console dit qu'il ne peut pas créer un display pour un undefined: ce qui veut dire que l'element n'a pas été trouvé. Il ne peut non plus créer un display pour un NULL quand j'utilise les firstChild ou childNodes car il n'y a pas d'enfants à ce noeud)
Je suis vraiment coincé et je m'en remets à la communté du Sdz.

Merci d'avance pour votre aide



Dieu n'a fait qu'ébaucher l'homme, c'est sur terre que chacun se crèe

1 réponse

afrnos Messages postés 61 Statut Membre 16
 
Je suis vraiment coincé et je m'en remets à la communté du Sdz.
FAUX !
un petit fail dans le copié collé :p

Sinon pour ton code ça ne serait pas plutôt comme ça :

while(element) 
{ 
    if(element.className=='attention') 
    { 
        return element; 
    } 
    element=element.nextSibling; 
} 


Afrnos GH
0
keurdange Messages postés 816 Statut Membre 231
 
Damn, je l'ai aussi posté sur le siteduzero, sorry.

Rectification: je m'en remet à la communauté de commentcamarche ;-)

j'ai essyé ton code mais ça donne toujours la même erreur.

j'ai aussi modifié le mien en faisant

function getAttention(element)
{
var parElement=element.parentNode,
enfParElement=parElement.childNodes;
for(var i=0; i<enfParElement.length;i++)
{
if(enfParElement[i].className==='attention')
{
return enfParElement[i];
break;
}
}
return false;
}

mais, ca ne marche toujours pas.

Merci d'avoir repondu...
0