Onblur : bug

Signaler
Messages postés
9
Date d'inscription
vendredi 16 juillet 2004
Statut
Membre
Dernière intervention
19 mars 2007
-
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
-
Bonjour,
soit un formulaire html avec 3 zones de texte;
la saisie etant obligatoire, je leur ajoute :
onblur="javascript:quit_mazone1()"
...
onblur="javascript:quit_mazone2()"
...
onblur="javascript:quit_mazone3()"

le code correspondant est:
function quit_mazone1()
{
   if (document.form.mazone1.value==""){mazone1.focus();}
}
function quit_mazone2()
{
   if (document.form.mazone2.value==""){mazone2.focus();}
}
function quit_mazone3()
{
   if (document.form.mazone3.value==""){mazone3.focus();}
}
resultat:
si je sort d'une zone de texte en la laissant vide, le code s'execute sans problème mais le curseur clignote dans la zone en question mais aussi dans la suivante. du vrai ping pong et impossible de prendre la main. obligé de faire ctrl+alt+supp.
une idée ?
merci bcp.
JP

2 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
Bonjour,

° déjà, il y a une erreur :  if (document.form.mazone1.value= =""){mazone1.focus();}
    ce devrait être document.form.mazone1

° éviter d'utiliser un name = un mot réservé du html/javascript. ici form.
    plutôt mettre "frm", par exemple...

° 3 fonctions pour 3 zones... et s'il y avait 100 zones : 100 fonctions ?
    pas normal en informatique. il faut n'en faire qu'une

° tu aurais pu donner le formulaire... ça nous éviterais de le faire

° la "boucle do infernale" s'explique parfaitement :

     on est sur le champ 1, on clique sur le champ 2
     dans l'ordre : onblur 1 ==> test vide ==> focus 1 ==> onblur 2 ==> test vide ==> focus 2  ...

donc, par exemple, si on veut rester dans le même esprit ,
    tester si le "champ onblur" est bien celui sur lequel on vient de cliquer...

ch'tit exemple :

<script type ="text/javascript">
function quit(z)
{
    if ( z.name==document.activeElement.name )
   {
        if (z.value.length==0)
        {
            z.focus();
        }
    }
}
</script>
<form name="frm">
   
   
   
</form>

     tel que c'est là, avec document.activeElement, c'est exclusif IE.
     dans les snippets il y a un truc pour le remplacer sous FF.



<hr />



Cordialement            Bul         [mon Site]     [M'écrire]           




<hr />
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
euh... jai fait n'importe quoi dans la function....
        l'alcool sans aucun doute...

<form name="frm">
   
   
   
</form>
<script type="text/javascript">
    document.frm.mazone1.focus();
    var tmp=document.frm.mazone1;
    function quit(z)
    {
        if ( tmp.value.length>0 ) { tmp=z; }
        tmp.focus();
    }
</script>

 

<hr />                        Cordialement               Bul         [mon Site]     [M'écrire]<hr />