Por supuesto, googleando encontraba cosas, pero no terminaron de convercerme, así que con un poco de esto y otro de aquello, et voila:
La invocación, como siempre en el onkeypress:
1 | <asp:TextBox ID="txtValidate" runat="server" onkeypress="return validateFloatKeyPress(this, event, 4, 6);"></asp:TextBox> |
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | /// <summary> /// Validamos el número de enteros y decimales /// </summary> /// <param name="el">Elemento que lanza el método</param> /// <param name="evt">Evneto</param> /// <param name="ints">Número de enteros permitidos</param> /// <param name="decimals">Número de decimales permitidos</param> function validateFloatKeyPress(el, evt, ints, decimals) { // El punto lo cambiamos por la coma if (evt.keyCode == 46) { evt.keyCode = 44; } // Valores numéricos var charCode = (evt.which) ? evt.which : event.keyCode; if (charCode != 44 && charCode > 31 && (charCode < 48 || charCode > 57)) { return false; } // Sólo una coma if (charCode == 44) { if (el.value.indexOf(",") !== -1) { return false; } return true; } // Determinamos si hay decimales o no if (el.value.indexOf(",") == -1) { // Si no hay decimales, directamente comprobamos que el número que hay ya supero el número de enteros permitidos if (el.value.length >= ints) { return false; } } else { // Damos el foco al elemento el.focus(); // Para obtener la posición del cursor, obtenemos el rango de la selección vacía var oSel = document.selection.createRange(); // Movemos el inicio de la selección a la posición 0 oSel.moveStart('character', -el.value.length); // La posición de caret es la longitud de la selección iCaretPos = oSel.text.length; // Distancia que hay hasta la coma var dec = el.value.indexOf(","); // Si la posición es anterior a los decimales, el cursor está en la parte entera if (iCaretPos <= dec) { // Obtenemos la longitud que hay desde la posición 0 hasta la coma, y comparamos if (dec >= ints) { return false; } } else { // El cursor está en la parte decimal // Obtenemos la longitud de decimales (longitud total menos distancia hasta la coma menos el carácter coma) var numDecimals = el.value.length - dec - 1; if (numDecimals >= decimals) { return false; } } } return true; } |
hola quisieria saber como podria hacerlos utilizando el punto en vez de la coma
ResponderEliminarVerás que si lees los comentarios, deberías verlo. El evento de "Punto por coma" lo cambias, el de "sólo una coma" lo cambias, y los string "," los cambias.
ResponderEliminarTambien basicamente si prefieres, podrias parametrizar el "separador de decimales" y asi mandar el cual prefieras desde una llamada externa.
ResponderEliminarno vale borrar si ingresado los 6 numeros enteros y borro no vale!!!!!!!
ResponderEliminar