2010-09-16 12 views
13

sto cercando di formattare i valori di input dell'utente utilizzando seguente tecnica, ma ottengo il seguente errore sulla console Fuoco BugJavascript toFixed() funzione

$ (this) .VAL(). ToFixed non è una funzione

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

Qualcuno può aiutarmi in questo?

risposta

29

.val() restituisce una stringa, per usare .toFixed() su un numero è necessario analizzare in un numero di prima, come questo:

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

O con jQuery 1.4 +, un po 'più pulito, almeno a mi 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 per l'utilizzo di una funzione: mi sembra molto più leggibile. – DMI

+0

Quando uso la funzione, restituisce un oggetto. – Keyslinger

6

toFixed funziona solo su un numero, analizzare il valore su un numero primo:

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

Questo perché val() restituisce un String piuttosto che un Number. Per essere in grado di utilizzare toFixed(), fare qualcosa di simile:

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

o anche:

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

Si può anche essere in grado di farlo un po 'più hackily come:

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

ma io non lo consiglio per motivi di leggibilità!