Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/09/2011, 10h20   #1
Nouveau Membre du Club
 
Benjamin
Développeur .NET
Inscription : septembre 2010
Messages : 78
Détails du profil
Informations personnelles :
Nom : Benjamin
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Service public

Informations forums :
Inscription : septembre 2010
Messages : 78
Points : 39
Points : 39
Par défaut Verification sur l'évènement KeyDown

Bonjour tout le monde,

Je travaille en ce moment sur un morceau de code JS qui me donne du fil à retordre ! J'utilise plein de TextBox dans un contexte de simulation d'Excel et j'applique via l'évènement keyDown un masque de saisie que j'ai customisé afin de laisser une certaines souplesse dans la saisie mais également être sur que dans ce qu'ils saisissent il ne puisse y avoir une erreur. Voila ce que le masque est censer faire :

- Autoriser le "-" uniquement si c'est le premier caractère
- Possibilité de mettre uniquement du numérique (0-9)
- Possibilité de mettre uniquement une seul ","
- Une fois la "," mise impossible de mettre plus de 2 chiffres numériques

Actuellement tout fonctionne SAUF (et c'est la ou vous intervenez) la "," je peux mettre par exemple : 15,,, ou 15,,3 ou 1,5, voire tout simplement ,,,

Voici donc le code que j'utilise et si vous trouvez le problème je vous serais infiniment reconnaissant (Le soucis se situe donc au niveau du isOnceDecimalSeparator )

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
var obj = document.getElementById(s.name + '_I');
 
    var valeur = obj.value;
 
    var reg = new RegExp('[\.|,]','g');
 
    var reg2 = new RegExp('[\-]', '');
 
    var keyCode = ('which' in e.htmlEvent) ? e.htmlEvent.which : e.htmlEvent.keyCode;
 
    var isNumeric = ( (keyCode >= 65 && keyCode < 91) || ( 47<keyCode && keyCode<58 && keyCode != 54 && e.htmlEvent.shiftKey==false) );
 
    var isOnceDecimalSeparator = ( (keyCode == 110 || keyCode == 188) && (valeur.length <= 0 || reg.test(valeur)) ) ;        
 
    var isNegChar = (keyCode == 109 || keyCode == 54);
 
    if (keyCode >= 37 && keyCode <= 40)
    {
		return;
    }
 
    if (keyCode == 221)
    {    
		e.htmlEvent.returnValue = false;
		return;
    }
 
    if (isNumeric)
    {    
        e.htmlEvent.returnValue = false;
        return;
    }
 
    if ( isOnceDecimalSeparator )
    {
        e.htmlEvent.returnValue = false;
        return;
    }
 
    if ( isNegChar )
    {
         if (valeur.length > 0 && reg2.test(valeur))
         {
            e.htmlEvent.returnValue = false;
            return;  
		}
    }
Je vous remercie par avance pour l'aide que vous m'apporterez !
Rhend est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 10h29   #2
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 30 040
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 30 040
Points : 45 141
Points : 45 141
je n'ai pas regardé en profondeur mais n'oublie pas de reinitialiser le pointeur de la regexp sinon tu auras le fameux souci du "une fois sur deux"...
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 11h47   #3
Nouveau Membre du Club
 
Benjamin
Développeur .NET
Inscription : septembre 2010
Messages : 78
Détails du profil
Informations personnelles :
Nom : Benjamin
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Service public

Informations forums :
Inscription : septembre 2010
Messages : 78
Points : 39
Points : 39
Je ferais attention à ca effectivement mais ce n'est pas mes RegExp le problème (a priorie du moins).

Ce que je peux rajouter que je n'ai pas dit dans mon premier topic c'est que lorsque je rentre dans OneDecimalSeparator, contrairement aux autres bloc if, le returnValue=False; ne fait rien du tout alors je me suis demander si la touche "," avait besoin d'un traitement spécial, mais je n'ai absolument pas trouver de réponse pour ca !
Rhend est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 15h38   #4
Nouveau Membre du Club
 
Benjamin
Développeur .NET
Inscription : septembre 2010
Messages : 78
Détails du profil
Informations personnelles :
Nom : Benjamin
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur .NET
Secteur : Service public

Informations forums :
Inscription : septembre 2010
Messages : 78
Points : 39
Points : 39
Bonjour,

Je me permet de ré-écrire un post car je n'ai pas encore trouvé ma solution et que j'ai d'autre élements à apporter à l'enquête

Ce problème de ',' ne se produit que sous (tenez vous bien) FireFox ! Sous IE6 IE7 IE8 IE9 cela fonctionne et sont Chrome également C'est bien la première fois que ca marche dans se sens la ! Je dois dire que je suis sur le cul là ^^

Ma version de FF est la 6.0 et je n'ai pas l'occasion de pouvoir tester sur les versions antérieur a FF !

Des idées ?
Rhend est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h49.


 
 
 
 
Partenaires

Hébergement Web