2010-09-16 2 views
13

Ich versuche, die Benutzereingabewerte mit folgenden Technik zu formatieren, aber ich bekomme die folgende Fehlermeldung auf Feuer Bug KonsoleJavascript toFixed() Funktion

$ (this) .val(). ToFixed ist keine Funktion

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

Kann jemand mir dabei helfen?

Antwort

29

.val() gibt eine Zeichenfolge, .toFixed() auf einer Nummer verwenden Sie es in eine Anzahl erste, wie diese analysieren müssen:

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

Oder mit jQuery 1.4+, ein bisschen sauberer, zumindest auf 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 für die Verwendung einer Funktion - sieht viel lesbarer für mich. – DMI

+0

Wenn ich die Funktion verwende, gibt sie ein Objekt zurück. – Keyslinger

6

toFixed funktioniert nur auf einer Zahl, analysieren den Wert auf eine Zahl zuerst:

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

Dies liegt daran, val() ein String gibt eher als ein Number. Um der Lage sein, toFixed() zu verwenden, so etwas wie:

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

oder sogar:

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

Sie können auch in der Lage sein, es zu tun, etwas mehr hackily als:

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

aber ich empfehle es nicht zur besseren Lesbarkeit!