input con tres decimales. javascript

Iniciado por OssoH, 27 Septiembre 2013, 13:34 PM

0 Miembros y 1 Visitante están viendo este tema.

OssoH

Hola :
Tengo un campo edit y quiero establecer una máscara para que me permita introducir tantos enteros como desee y sólo tres decimales.

Tengo el siguiente codigo

<script>
function NumCheck(e, field) {
key = e.keyCode ? e.keyCode : e.which

// backspace
if (key == 8) return true
// 0-9
if (key > 47 && key < 58) {
if (field.value == "") return true
//return field.value.toFixed(2);
regexp = /.[0-9]{3}$/
return !(regexp.test(field.value))
}
// .
if (key == 46) {
if (field.value == "") return false
regexp = /^[0-9]+$/
return regexp.test(field.value)
}
// other key return false
return false;

}
</script>
<input type="text" onkeypress="return NumCheck(event, this)"/>


Si que funciona la parte decimal porque te deja poner hasta un máximo de 3 digitos, pero el problema está en la parte entera que te deja poner hasta 4 digitos máximo.
Es decir, si escribo 230090.123 no me lo permite.

Alguien sabe como arreglarlo?

Gracias de antemano!!

OssoH

nada ...sigo intentandolo. La expresión regular se me "atraganta"

OssoH

Al final lo he conseguido. Pongo la solución aunque seguramente haya una forma más fácil de hacerlo.


function onlyDotsAndNumbers(txt, event) {
    var charCode = (event.which) ? event.which : event.keyCode   
   
// backspace
if (charCode == 8) return true

if (charCode == 46) {
        if (txt.value.indexOf(".") < 0)
            return true;
        else
            return false;
    }

    if (txt.value.indexOf(".") > 0) {
        var txtlen = txt.value.length;
        var dotpos = txt.value.indexOf(".");
        if ((txtlen - dotpos) > 3)
            return false;
    }

    if (charCode > 31 && (charCode < 48 || charCode > 57))
        return false;

    return true;
}