Limiter à 2 décimales dans keypress d'une zone de texte?
Je veux entrer un point décimal dans une zone de texte. Je veux restreindre l'utilisateur par la saisie de plus de 2 chiffres après la virgule. J'ai écrit le code pour la réalisation que dans l'événement Keypress.
function validateFloatKeyPress(el, evt) {
var charCode = (evt.which) ? evt.which : event.keyCode;
if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57)) {
return false;
}
if (charCode == 46 && el.value.indexOf(".") !== -1) {
return false;
}
if (el.value.indexOf(".") !== -1)
{
var range = document.selection.createRange();
if (range.text != ""){
}
else
{
var number = el.value.split('.');
if (number.length == 2 && number[1].length > 1)
return false;
}
}
return true;
}
<asp:TextBox ID="txtTeamSizeCount" runat="server" onkeypress="return validateFloatKeyPress(this,event);" Width="100px" MaxLength="6"></asp:TextBox>
Le code de travail, mais la question est: si j'entre ".75" et ensuite de le modifier pour "1.75", il n'est pas possible. Seule façon de le faire est de le supprimer complètement, puis tapez "1.75". Ce problème se produit si il y a déjà 2 chiffres après la virgule dans la zone de texte. Les conditions que je lui impose sont
a) Après la virgule est présente, elle doit au moins avoir 1 ou 2 chiffres. Pour les ex .75 ou .7 ou de 10,75 ou 333.55 ou 333.2 est acceptée. mais non .753 ou 12.3335
b) Avant la virgule, il ne doit pas être pour l'utilisateur de saisir une valeur. L'utilisateur doit également être en mesure d'entrer un nombre entier également.
Pouvez-vous me dire quel pourrait être le problème?
Merci,
Jollyguy
Vous devez vous connecter pour publier un commentaire.
Vous avez été près de là. Il suffit de vérifier qu'il n'y a plus de 2 caractères après la virgule.
Mise à JOUR 1 - vérifier carat, pour permettre l'insertion de caractères avant la virgule.
Mise à JOUR 2 - corriger problème souligné par ddlab commentaire et un seul point.
http://jsfiddle.net/S9G8C/1/http://jsfiddle.net/S9G8C/203/
onkeypress="return validateFloatKeyPress(this,event);"
. Ce n'est pas comment, je vous recommande de le faire, mais ma réponse a été un correctif de code existant. Voici une mise à jour de violon01.00
quelque chose qui va toujours convertir nombre à 2 décimales.Envisager tirant profit de HTML5 est Contrainte de Validation de l'API. Il n'est pas nécessairement empêcher de taper des valeurs non valides, mais le champ est marqué invalide et il s'arrête à la soumission de la
<form>
(par défaut). J'ai ajouté le<output>
pour illustrer pourquoi le navigateur considère par exemple "1.100" une valeur valide (il voit la valeur numérique que "1.1").JS:
CSS:
HTML:
Philosophiquement, vous pouvez considérer ceci comme un plus utilisable approche car elle permet à l'utilisateur de coller une entrée non valide et le modifier directement dans le champ.
Vous pouvez le faire par un autre moyen avec de l'événement onchange, à ne pas limiter à l'utilisateur de saisir, au lieu tout simplement de convertir le nombre après la saisie, à rendre uniforme, comme cela,
JS:
HTML:
45.846
devrait être45.85
mais dans votre code utilisateur est nécessaire pour la conversion de leurs soi-même et ensuite, ils pourront type45.85
directementSalut @webvitaly Le code ci-dessus fonctionne dans IE aussi s'il vous plaît vérifier
Et retour arrière après décimales ne fonctionne pas sous Mozilla, j'ai mis à jour ma réponse.
Cela aidera.jsFiddle
ce code est très complet, je change le "." à ",":
ne pouvez pas écrire plus ","
Mon problème est que j'ai besoin d'afficher un message d'erreur en temps réel si l'utilisateur est autorisé à seulement 2 décimales:
Le code ci-dessus a fonctionné pour moi.
.toFixed
convertit le flotteur à une chaîne de wit seulement 2 décimales et je dois convertir retour à flotteur afin de vérifier avec la valeur initiale si sont les mêmes.P. S. Et avant que cette condition, vous devez vérifier si la valeur est NaN.