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 )
Je vous remercie par avance pour l'aide que vous m'apporterez !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }![]()
Partager