2012-05-13 34 views
5

Tengo un campo de entrada que quiero restringir para que el usuario solo pueda ingresar un número con un máximo de dos decimales. Quiere hacer esto usando jQuery.Restringir el campo de entrada a dos decimales con jQuery

¿Podría usar jQuery aFija() función de alguna manera?

Gracias!

+0

¿Por qué quieres usar jQuery? Puedes hacer lo mismo usando "maxlenght = 2" en html ... Luego, si quieres estar seguro de que el usuario puede insertar solo decimales, puedes hacer una función llamada al evento "onkeypress" – AleVale94

+0

Parece que quieres validar un campo de dinero. Tal vez esto ayude: http://javascriptbymallik.blogspot.com/2009/08/how-to-check-two-decimal-validation-in.html – Tim

Respuesta

8
$('input#decimal').blur(function(){ 
    var num = parseFloat($(this).val()); 
    var cleanNum = num.toFixed(2); 
    $(this).val(cleanNum); 
    if(num/cleanNum < 1){ 
     $('#error').text('Please enter only 2 decimal places, we have truncated extra points'); 
     } 
    }); 

Aquí es un violín http://jsfiddle.net/sabithpocker/PD2nV/

Usando toFixed será de todos modos causar aproximación 123.6666 -> 123.67 Si se quiere evitar aproximación verificar esta respuesta Display two decimal places, no rounding

2
$("#myInput").focusout(function() { 
    if ($(this).val().length > 2 || isNaN(Number($(this).val())) { 
     alert("Wrong number format"); 
    } 
}); 
+0

Esto parece verificar solo la longitud del valor, no el número de lugares decimales en el valor. –

+0

igual que @PhilDD y fue la señorita una ")" – projo

3
<input type="text" name="amount1" id="amount1" class="num_fld Amt" onkeypress="return check_digit(event,this,8,2);" size="9" value="" maxlength="8" style="text-align:right;" /> 

La siguiente función restringirá decimales de acuerdo a su necesidad de decimales y también restringe más t Han un punto

function check_digit(e,obj,intsize,deczize) { 
    var keycode; 

    if (window.event) keycode = window.event.keyCode; 
    else if (e) { keycode = e.which; } 
    else { return true; } 

    var fieldval= (obj.value), 
     dots = fieldval.split(".").length; 

    if(keycode == 46) { 
     return dots <= 1; 
    } 
    if(keycode == 8 || keycode == 9 || keycode == 46 || keycode == 13) { 
     // back space, tab, delete, enter 
     return true; 
    }   
    if((keycode>=32 && keycode <=45) || keycode==47 || (keycode>=58 && keycode<=127)) { 
     return false; 
    } 
    if(fieldval == "0" && keycode == 48) { 
     return false; 
    } 
    if(fieldval.indexOf(".") != -1) { 
     if(keycode == 46) { 
      return false; 
     } 
     var splitfield = fieldval.split("."); 
     if(splitfield[1].length >= deczize && keycode != 8 && keycode != 0) 
      return false; 
     }else if(fieldval.length >= intsize && keycode != 46) { 
      return false; 
     }else { 
      return true; 
     } 
    } 
} 
3

Una solución HTML5:

<input type="number" step="0.01" /> 

Demo

Si desea entradas no válidas estilo (algunos navegadores lo hacen de forma predeterminada), puede utilizar :invalid selector:

input:invalid { box-shadow: 0 0 1.5px 1px red; } 

Tenga en cuenta que este enfoque no intentará truncar el número automágicamente, pero si el usuario introduce más de dos dígitos decimales, la entrada no será válida, y por lo tanto no será enviado el formulario:

Screenshot on Firefox

2

Un enfoque alternativo con una expresión regular:

$('#id').on('input', function() { 
     this.value = this.value.match(/^\d+\.?\d{0,2}/); 
    }); 

El selector de ID puede ser reemplazado por un selector CSS.

0
<input type="text" id="decCheck" onkeyup="decimalCheck();"/> 

<script> 
function decimalCheck(){ 
var dec = document.getElementById('decCheck').value; 
if(dec.includes(".")){ 
    var res = dec.substring(dec.indexOf(".")+1); 
    var kl = res.split(""); 
    if(kl.length > 1){ 
    document.getElementById('decCheck').value=(parseInt(dec * 100)/
     100).toFixed(2); 
    } 
    } 
} 
</script> 
Cuestiones relacionadas