2013-08-19 24 views
13

私は自分のページにたくさんのHTML 5入力コントロールを使用しています。私の要件の1つは、通貨機能付きのテキストボックスを持つことです。このために私はこの試みた:HTML 5通貨形式

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

をこれは私が10,000.00

しかし、まだそのすべてが私のすべての要件を満たしていないような値を入力することができます。私は、ユーザーが10000に入力する場合は それは10,000 onblurのような通貨形式に変換する必要があります。

私はJavascriptの入力型から値を読み込むと、解析せずに計算するのに使用できない文字列値の代わりに浮動小数点値を与えるはずです。

+0

'入力タイプいずれの場合の文字列となり.value' =「番号」。とにかくそれをいつか解析する必要があります... – Teemu

+0

入力タイプ= "数値"。値はどんな場合でも文字列になります。 parseFloat(input type = "number" .value)を持つ単純な関数はすべての場合に機能していました。 – user2561997

答えて

17

は、ここで追加の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, "") 

} 

正規表現は、ここからであるHow to print a number with commas as thousands separators in JavaScript

+0

これは私の問題をこの下のAmithソリューションと組み合わせて解決しました。 – user2561997

2

これを試してみてください - 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

ありがとうAmith。あなたは私の問題を解決しました。 – user2561997