Je n'ai pas trouvé d'exemple sur le web.
cela me surprend un peu!
Néanmoins, la fonction fournie dans la ne permet pas de corriger une erreur de saisie sous FireFox, retour arrière, flèches de direction, tabulation et autre entrée sont annulés, donc je t'en fourni une autre, mais tout d'abord la fonction de test qui sera appelée dans celle ci
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| function testValeur( obj, mini, maxi){
// recup de la valeur
var val = parseFloat( obj.value);
// test aux limites
if(( val < mini) || (val >maxi)){
// changement couleur de fond et affichage erreur
obj.style.backgroundColor = "#ffe0e0";
alert( 'la valeur doit \352tre comprise entre\nmini\t: ' +mini +'\nmaxi\t: ' +maxi);
// restaure un fond blanc
obj.style.backgroundColor = "#ffffff";
// annule la saisie
obj.value = "";
// remets le focus
obj.focus();
}
} |
et maintenant la fonction de saisie
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
| function saisieChiffre( e, mini, maxi){
// get event si non transmis a la fonction
e = e || window.event;
// accepte chiffres plus point
var regValide = /[\d\.]/;
// accepte les touches BS TAB ENTER END HOME etc...
var regSpecial = /[\x00\x08\x09\x0D\x23\x24\x25\x26\x27\x28]/;
// recup code touche pressee
var code = e.which || e.keyCode;
// recup le caractere correspondant
var touche = String.fromCharCode( code);
// test la validite de la saisie
var saisieOk = regValide.test( touche) || regSpecial.test( touche);
// test aux bornes si OK
if( saisieOk){
var oInput = e.target || e.srcElement;
// differe le test pour permettre le update de l'input
setTimeout( function(){
testValeur( oInput, mini, maxi);
}, 10);
}
// annule la saisie
else{
if( e.stopPropagation){
e.stopPropagation();
e.preventDefault();
}
else{
e.cancelBubble = true;
e.returnValue = false;
}
}
} |
et tout cela avec un appel du type
<input type="text" onkeypress="saisieChiffre(event, 0, 59)">
Les commentaires sont nombreux, mais n'hésites pas si tu rencontres un problème.
Partager