2010-09-16 40 views
13

Estoy tratando de dar formato a los valores de entrada del usuario utilizando la técnica siguiente, pero me sale el siguiente error en la consola de errores de fuegoJavascript toFixed() la función

$ (this) .val(). ToFixed no es una función

$(".amount-text").bind('change',function() { 
    $(this).val(($(this).val()).toFixed(2)); 
}); 

¿Alguien me puede ayudar en esto?

Respuesta

29

.val() devuelve una cadena, utilizar .toFixed() en un número que tendrá que analizar en un número primero, así:

$(".amount-text").bind('change',function() { 
    $(this).val(parseFloat($(this).val()).toFixed(2)); 
}); 

O con jQuery 1.4 o superior, un poco más limpio, al menos a me use a function with .val():

$(".amount-text").bind('change',function() { 
    $(this).val(function(i, v) { return parseFloat(v).toFixed(2); }); 
}); 

You can give it a try here.

+1

+1 para usar una función: me parece mucho más legible. – DMI

+0

Cuando uso la función, devuelve un objeto. – Keyslinger

6

toFixed sólo funciona en un número, analizar el valor a un número primero:

$(this).val(parseFloat($(this).val()).toFixed(2)); 
1

Esto se debe a val() devuelve un String en lugar de un Number. Para poder utilizar toFixed(), hacer algo como:

$(".amount-text").bind('change',function() { 
    $(this).val((parseFloat($(this).val())).toFixed(2)); 
}); 

o incluso:

$(".amount-text").bind('change',function() { 
    $(this).val((new Number($(this).val())).toFixed(2)); 
}); 

También puede ser capaz de hacerlo un poco más hackily como:

$(".amount-text").bind('change',function() { 
    $(this).val((0 + $(this).val()).toFixed(2)); 
}); 

pero no lo recomiendo para fines de legibilidad!

Cuestiones relacionadas