Réaction différente de IE à Firefox

lteixeir Messages postés 7 Date d'inscription dimanche 24 juin 2007 Statut Membre Dernière intervention 21 juillet 2008 - 21 juil. 2008 à 14:56
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 22 juil. 2008 à 12:04
Bonjour à tous !




Je travaille actuellement sur des champs textes qui doivent vérifier certaines conditions : s'écrire JJ/MM/AAAA ou JJ/MM/AAAA HH:MM ou JJ/MM/AAAA HH:MM:SS.


J'utilise donc une expression régulière associée à du JavaScript pour tester cela sur un évènement onBlur.





Voici l'expression régulière :



var
reg =
/^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2})$|^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2}\s([0-1]\d|[2][0-3])[:][0-5]\d)$|^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2}\s([0-1]\d|[2][0-3])[:][0-5]\d[:][0-5]\d)$/gi;




La partie principale est celle-ci : ^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2})$ (JJ/MM/AAAA).





Sur IE tout fonctionne parfaitement, sur Firefox, c'est beaucoup plus aléatoire.
Lorsque je remplis mon champ texte par "21/10/1998" par exemple et que
je quitte mon champ texte, aucune erreur, mais si je refais cette
manipulation une 2ème fois, l'alerte que j'ai mis en cas d'erreur
s'affiche. :S Aucune erreur ne s'affiche dans la console d'erreur.




D'où cela peut-il venir ? Et surtout, comment régler le problème ?

9 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
21 juil. 2008 à 15:17
Bonjour,

aucune raison.
même si les différences existent ( doux euphémisme ), pas sur ce que tu donnes

on n'a pas tout ce qu'il faut d'ailleurs pour dire,
mais je suppute un return false qui manquerait ?
tu peux mettre un EXTRAIT du html ( formulaire ... ) ?

enfin... fais nous un exemple qui ne fonctionne pas ! ( 5 lignes !
tout ce qu'il faut mais pas plus  )

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
lteixeir Messages postés 7 Date d'inscription dimanche 24 juin 2007 Statut Membre Dernière intervention 21 juillet 2008
21 juil. 2008 à 15:24
Voilà comment je l'utilise :
                            "var reg2 = /^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2})$|^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2}\s([0-1]\d|[2][0-3])[:][0-5]\d)$|^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2}\s([0-1]\d|[2][0-3])[:][0-5]\d[:][0-5]\d)$/gi; // Date et Heure" & vbCrLf & _
                            "   if ( document.getElementById(prefix + texte).value != '' ){" & vbCrLf & _
                            "       if ( !reg2.test(document.getElementById(prefix + texte).value) ){" & vbCrLf & _
                            "           window.alert(alerte);" & vbCrLf & _
                            "           document.getElementById(prefix + texte).value = '';" & vbCrLf & _
                            "           return false;" & vbCrLf & _
                            "       }" & vbCrLf & _
                            "   }" & vbCrLf & _

Comme tu peux le voir, le "return false;" y est...
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
21 juil. 2008 à 15:37
certes..
mais c'est quoi ces "  ? asp ou php ?
et le html ?  et comment on appelle cette fonction ?
et si c'est ok : pas de return false, donc peut-être le formulaire,
s'il existe, est-il soumis....
un extrait de la page html résultante, qui ne fonctionne pas, c'est possible ?
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
lteixeir Messages postés 7 Date d'inscription dimanche 24 juin 2007 Statut Membre Dernière intervention 21 juillet 2008
21 juil. 2008 à 15:50
C'est du VB.NET associé à du code ASP.NET.

Je l'appelle de la façon suivante :

CType(e.Item.FindControl("tbValeur1"), TextBox).Attributes.Add("OnBlur", "verifDateEntier('" & Me.constantName & ViewState.Item("lineNumber") & "_" & "','tbValeur1','" & Lng.RES15s033 & "')")

Pourquoi un e.Item.FindControl(), parce que j'utilise un repeater.
Je n'ai pas codé entièrement cette page, je suis juste venue y ajouter les choses nécessaires.

Et voici la fonction entière :

"<script  type=""text/javascript"">function affichage(prefix,val,type) {" & vbCrLf & _
"function verifDateEntier(prefix,texte,alerte){" & vbCrLf & _
"var reg2 = /^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2})$|^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2}\s([0-1]\d|[2][0-3])[:][0-5]\d)$|^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2}\s([0-1]\d|[2][0-3])[:][0-5]\d[:][0-5]\d)$/gi; // Date et Heure" & vbCrLf & _
"   if ( document.getElementById(prefix + texte).value != '' ){" & vbCrLf & _
"       if ( !reg2.test(document.getElementById(prefix + texte).value) ){" & vbCrLf & _
"           window.alert(alerte);" & vbCrLf & _
"           document.getElementById(prefix + texte).value = '';" & vbCrLf & _
"           return false;" & vbCrLf & _
"       }" & vbCrLf & _
"   }" & vbCrLf & _
"}</script>"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
21 juil. 2008 à 16:11
c'est pas possible ?!?
vbcrlf et le reste c'est du VB + ASp !

la page html résultante avec le champs dans son formulaire svp !

lancer l'application, afficher la source dans le navigateur
ou sauver la page html en faire l'extrait nécessaire !

sinon, moi je ne peux rien que supputer, et ce que je
ferais va fonctionner ! or, pour toi, ça ne marche pas !
ça ne sert donc à rien que je fasse !

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
lteixeir Messages postés 7 Date d'inscription dimanche 24 juin 2007 Statut Membre Dernière intervention 21 juillet 2008
21 juil. 2008 à 16:18
<td class="Contenu1" width="300" valign="middle">
 Date d'inscription
 1
</td>

<td class="Contenu1" width="150" align="center" valign="middle">
 <select name="rptFieldsList:_ctl1:dwnOp" id="rptFieldsList__ctl1_dwnOp" class="form" onChange="affichage('rptFieldsList__ctl1_',this.value,1);">
 <option value="0">---------- Critère ----------</option>
 <option value="1">Renseigné</option>
 <option value="2">Non renseigné</option>
 <option value="5">inférieur strictement à</option>
 <option value="6">supérieur strictement à</option>
 <option selected="selected" value="7">Compris entre</option>
 <option value="10">il y a</option>
 <option value="11">dans</option>
 <option value="12">strictement la date</option>
 <option value="13">date anniversaire</option>
 </select>
</td>

<td class="Contenu1" width="300" valign="middle">
 
 
 
 
 et
 
 
 
 

 
 <select name="rptFieldsList:_ctl1:dwnValeur" id="rptFieldsList__ctl1_dwnValeur" class="form">
 </select>

ETC...
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
21 juil. 2008 à 16:33
en simplifiant :

<script  type="text/javascript">
function verifDateEntier(prefix,texte,alerte)
{
var reg2 = /^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2})$|^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2}\s([0-1]\d|[2][0-3])[:][0-5]\d)$|^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2}\s([0-1]\d|[2][0-3])[:][0-5]\d[:][0-5]\d)$/gi;

   if ( document.getElementById(prefix + texte).value != '' )
    {
       if ( !reg2.test(document.getElementById(prefix + texte).value) )
         {
           window.alert(alerte);
           //document.getElementById(prefix + texte).value = '';   pour les tests
           return false;
       }
         alert("ok");      // pour les tests
         return true;   
   }
}
</script>

 

 
 
et ça baigne et pour FF, et pour IE....
il n'y a pas de formulaire dans lequel est inclus le champs ?
sinon, "l'erreur est ailleurs"

mais pas sûr que des " ne manque pas ou ne sont pas en trop...
( j'ai fait manuellement ! puisque tu ne nous donnes pas la fonction résultante ! )

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
lteixeir Messages postés 7 Date d'inscription dimanche 24 juin 2007 Statut Membre Dernière intervention 21 juillet 2008
21 juil. 2008 à 17:05
La fonction résultante est :

function verifDateEntier(prefix,texte,alerte){
var reg = new RegExp('^([0]?[1-9]|[1|2][0-9]|[3][0|1])[/]([0]?[1-9]|[1][0-2])[/]([0-9]{4}|[0-9]{2})$','gi'); // Que pour la date
var reg2 = /^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2})$|^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2}\s([0-1]\d|[2][0-3])[:][0-5]\d)$|^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2}\s([0-1]\d|[2][0-3])[:][0-5]\d[:][0-5]\d)$/gi; // Date et Heure
if ( document.getElementById(prefix + texte).value != '' ){
if ( !reg2.test(document.getElementById(prefix + texte).value) ){
window.alert(alerte);
document.getElementById(prefix + texte).value = '';
return false;
}
}
}
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
22 juil. 2008 à 12:04
ben avec la fonction que tu nous donnes, comme
celle que j'avais mise.... ben ça baigne IE, FF :
on n'a pas ce qu'il faut pour trouver l'erreur
( essaye ci dessous, tu verras )

<script  type="text/javascript">
function verifDateEntier(prefix,texte,alerte){
var reg = new RegExp('^([0]?[1-9]|[1|2][0-9]|[3][0|1])[/]([0]?[1-9]|[1][0-2])[/]([0-9]{4}|[0-9]{2})$','gi'); // Que pour la date
var reg2 = /^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2})$|^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2}\s([0-1]\d|[2][0-3])[:][0-5]\d)$|^(([0-2]\d|[3][0-1])[/]([0]\d|[1][0-2])[/]([1][9]|[2][0])\d{2}\s([0-1]\d|[2][0-3])[:][0-5]\d[:][0-5]\d)$/gi; // Date et Heure
   if ( document.getElementById(prefix + texte).value != '' ){
       if ( !reg2.test(document.getElementById(prefix + texte).value) ){
           window.alert(alerte);
           //document.getElementById(prefix + texte).value = '';
           return false;
       }
         else    {    alert("ok");
                      return true;    }
   }
}</script>
 
 

en rouge pour voir ce qui se passe...
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
Rejoignez-nous