2013-08-19 14 views
13

Ich verwende viele HTML 5 Eingabesteuerelemente in meinen Seiten. Eine meiner Anforderungen ist eine Textbox mit Währungsmerkmal. Dazu habe ich versucht, dies:HTML 5 Währungsformat

<input type="number" pattern="(d{3})([.])(d{2})" /> 

Dies ermöglicht es mir Werte eingeben wie 10.000,00

Aber immer noch alle seine nicht erfüllt alle meine Anforderungen. Ich will, dass, wenn der Benutzer 10000 eintippt es in Währungsformat wie 10.000 onblur konvertieren sollte.

Und wenn ich den Wert aus dem Eingabetyp in meinem Javascript lesen, sollte es mir einen Gleitkommawert anstelle eines Zeichenfolge-Werts geben, die ich nicht ohne Parsen berechnen kann.

+0

'input type = "number" .value' eine Zeichenfolge in jedem Fall sein wird. Sie müssen es sowieso irgendwann parsen ... – Teemu

+0

input type = "number" .value wird in jedem Fall ein String sein. aber einfach mit parseFloat (input type = "number" .value) hätte in allen Fällen funktioniert. – user2561997

Antwort

17

Hier ist eine Abhilfe mit einem zusätzlichen input type="text":

http://jsfiddle.net/UEVv6/2/

HTML

<input type="text" id="userinput" pattern="[0-9]*"> 
<br> 
<input type="number" id="number"> 

JS

document.getElementById("userinput").onblur =function(){  

    //number-format the user input 
    this.value = parseFloat(this.value.replace(/,/g, "")) 
        .toFixed(2) 
        .toString() 
        .replace(/\B(?=(\d{3})+(?!\d))/g, ","); 

    //set the numeric value to a number input 
    document.getElementById("number").value = this.value.replace(/,/g, "") 

} 

regex ist von hier How to print a number with commas as thousands separators in JavaScript

+0

Danke, das hat mein Problem gelöst, gekoppelt mit der Lösung von Amith darunter. – user2561997

2

versuchen, diese - http://jsbin.com/azOSayA/1/edit

function commaSeparateNumber(val){ 
    while (/(\d+)(\d{3})/.test(val.toString())){ 
     val = val.toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2'); 
    } 
    return val; 
    } 
$('#elementID').focusout(function(){ 

    alert(commaSeparateNumber($(this).val())); 
}); 
+0

Danke Amith. Du hast mein Problem gelöst. – user2561997