2013-02-01 194 views
35

中的貨幣我想將用戶輸入的數字格式化爲使用javascript的貨幣。這適用於<input type="text" />。不過,在<input type="number" />我似乎無法將該值設置爲包含非數字值的任何內容。下面撥弄顯示我的問題將值設置爲<input type =「number」/>

http://jsfiddle.net/2wEe6/72/

反正對我來說,該值設置爲類似$125.00

我想使用<input type="number" />,所以移動設備知道要爲鍵盤輸入提供一個鍵盤。

+6

你就不能顯示在$控制權的前面?或者你想讓用戶控制他們想要進入的貨幣?在後一種情況下,恐怕只有'type =「text」'有資格。 –

+0

@MrLister這是一個很好的觀點。這可能是我最終會做的。 – Danny

+0

如果您想允許用戶更改貨幣類型,但仍然執行'type =「number」',則可以選擇具有各種貨幣符號的框。請注意,許多國家將貨幣符號放在數字之後而不是之前。 – RoboticRenaissance

回答

12

最後我做了一個jQuery插件,它將爲我適當地格式化<input type="number" />。我還注意到,在某些移動設備上,minmax屬性實際上並不會阻止您輸入比指定的數字更低或更高的數字,因此插件也會對此進行解釋。下面是代碼和一個例子:

(function($) { 
 
    $.fn.currencyInput = function() { 
 
    this.each(function() { 
 
     var wrapper = $("<div class='currency-input' />"); 
 
     $(this).wrap(wrapper); 
 
     $(this).before("<span class='currency-symbol'>$</span>"); 
 
     $(this).change(function() { 
 
     var min = parseFloat($(this).attr("min")); 
 
     var max = parseFloat($(this).attr("max")); 
 
     var value = this.valueAsNumber; 
 
     if(value < min) 
 
      value = min; 
 
     else if(value > max) 
 
      value = max; 
 
     $(this).val(value.toFixed(2)); 
 
     }); 
 
    }); 
 
    }; 
 
})(jQuery); 
 

 
$(document).ready(function() { 
 
    $('input.currency').currencyInput(); 
 
});
.currency { 
 
    padding-left:12px; 
 
} 
 

 
.currency-symbol { 
 
    position:absolute; 
 
    padding: 2px 5px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<input type="number" class="currency" min="0.01" max="2500.00" value="25.00" />

41

添加step="0.01"<input type="number" />參數:

<input type="number" min="0.01" step="0.01" max="2500" value="25.67" /> 

演示:http://jsfiddle.net/uzbjve2u/

但美元符號必須停留在文本框外......每一個非數字或分離charachter將被自動裁剪。您可以使用經典文本框like described here

+0

不是OP要求的...如果value =「25.6」這將顯示...它應該顯示「25.60」 – patrick

+1

[HTML5規格/這個實現是越野車](https://bugzilla.mozilla.org/show_bug.cgi?id=1003896)@帕特里克。不過,除了[hackish,依賴於瀏覽器的解決方案](https://stackoverflow.com/a/19205426/1654265)之外,你想要的是不可能的,儘管它不適用於Firefox。我已經編輯了小提琴,因爲'全球化。格式'功能現在已經打破它*在FF中,所以我想我應該感謝你的反饋:) –

+1

@AndreaLigios你所描述的經典鏈接textbox正是我在爲文本框設置貨幣的格式。我不得不做出一些改變,但這是一個很好的開始。 – Jester

3

看來,你需要兩個字段,對於貨幣的選擇列表和編號字段不是數字輸入過濾掉其他任何值。

在這種情況下,常見的技術是使用div或跨度顯示(表單域offscreen),並點擊切換到表單元素進行編輯。

+0

這是比讓用戶輸入貨幣更好的選擇。 –

+0

對不起,但這裏給出的jQuery示例和Dojo中的CurrencyTextBox提供了比兩個字段更方便用戶管理輸入和驗證的方法。除了在手機上,因爲你必須使用文本鍵盤。最終的諷刺是在我的iPad上,type =「number」包含我的區域設置的貨幣符號£。 HTML確實需要趕上,並提供一些切換到適當的鍵盤的貨幣。 –

6

你們是完全正確的電話號碼只能在數字字段中去。我用的是同樣的事情與已經在span標記了CSS樣式的上市:

<span>$</span><input type="number" min="0.01" step="0.01" max="2500" value="25.67"> 

然後加一點造型魔法:

span{ 
    position:relative; 
    margin-right:-20px 
} 
input[type='number']{ 
    padding-left:20px; 
    text-align:left; 
} 
+0

這是很好,乾淨。唯一的問題是點擊貨幣符號不會集中輸入。 –

+0

這是一個簡單的JavaScript問題。點擊跨度上的事件可以集中輸入 – frugalcoder

+3

...或者您可以使用'

相關問題