Esta segunda es un poco más compleja y es para formato float
Código javascript
:
Ver original//////////////////////////////////////////////////
////////////////// By Matrak /////////////////////
/* Especificacion */
// ob -> Objeto input text
// n -> Nº de digitos de la parte entera
// d -> Nº de digitos de la parte flotante
// sin -> (true) o (false)
// -true: quiere decir que podra tener M digitos enteros si no hay parte flotante
// ej: 99.99% si pero 100% sin decimales porque no vale 100.02%
// -false: Se comporta que cuando ya hay introducido n digitos y metemos 1 mas pone el '.' entre medio
// M -> M digitos sin parte flotante
//ejemplos de imputs
//
//<input name="digitos" type="text" onkeyup="maskFloat(this,2,3,true,3,true)">
//
//<input name="digitos" type="text" onkeyup="maskFloat(this,2,3,true,4,false)">
//
//<input name="digitos" type="text" onkeyup="maskFloat(this,2,3,false)">
function maskFloat(ob,n,d,sin,M,gen) {
if (!sin) M=n+1;
if (n>=M) {
alert("error en la especificación de la funcion: n < M");
ob.value='';
return false;
}
/* Solo numero y solo un '.' */
if (/[^0-9\.]/.test(ob.value[ob.value.length-1])) ob.value=ob.value.slice(0,ob.value.length-1)
else if (/^\./.test(ob.value[ob.value.length-1]) && /\d*\.\d*\./.test(ob.value)) ob.value=ob.value.slice(0,ob.value.length-1)
posDec = ob.value.indexOf(".");
if (/\d*\.\d*/.test(ob.value) && posDec<M){
if (/^\./.test(ob.value)) ob.value='0.';
numero=ob.value.split('.')
if (numero[1].length>d)
ob.value=ob.value.slice(0,ob.value.length-1)
return true;
}else{
if (sin) {
if (gen){
/*Caso generico*/
if (ob.value.length>M) {
ob.value=ob.value.slice(0,ob.value.length-1)
}
}else{
/*Para % este caso (todo que pasa de 100% se queda en 100% y sin decimales)*/
if (ob.value.length==M){
if (/[^\.]/.test(ob.value[ob.value.length-1]))
ob.value=100;
}else if (ob.value.length>M){
ob.value=100;
}
/*--------*/
}
}else {
if (ob.value.length>n) {
ob.value=ob.value.slice(0,ob.value.length-1)+'.'+ob.value.slice(ob.value.length-1,ob.value);
}
}
return true;
}
}