使用美元符号和逗号格式化货币输入字段
Format currency input field with dollar sign & commas
我有一个 javascript/jquery 形式的收入输入字段:
- 需要一个美元符号 :before
- 随着货币的增加添加逗号
我通过 css 显示了一个美元符号,但问题是将它居中并确保字段入口点紧挨着它而不重叠。不确定如何做逗号。欢迎任何建议或提示!
HTML:
<form id="rev-calculator">
<label for="price">Monthly Revenue</label>
<div class="fields">
<input type="number" name="price" id="price" min="0" max="10000000000" required data-type="number"> </input>
<br>
</form>
CSS:
<style>
.body {
text-align: left;
}
.fields {
margin: 0 10px 0 0;
}
.fields:before {
content: "$";
text-align: center;
position: relative;
left:30px;
}
#price {
border-radius: 5px;
margin: 15px;
padding: 10px;
color: black;
}
</style>
JS:
<script>
$('#rev-calculator').on('click', 'button', function(e) {
e.preventDefault();
var price = $("#price").val();
console.log(price);
})
</script>
代码笔:https://codepen.io/kedarPE/pen/JjroYyb
input field
好吧,这是一个方法,虽然实际上并不像我开始走这条路时所希望的那么简单。您可以使用 Intl.NumberFormat 在其中获取逗号(根据语言环境)。为了容纳小数,我在开始时嗅探它们并将它们附加到结果中。
为了允许使用逗号,我将其设为具有模式属性的文本字段。另外,我调整了你的 CSS 使 $
看起来更漂亮
$('#price').keydown(function(e) {
setTimeout(() => {
let parts = $(this).val().split(".");
let v = parts[0].replace(/\D/g, ""),
dec = parts[1]
let calc_num = Number((dec !== undefined ? v + "." + dec : v));
// use this for numeric calculations
console.log('number for calculations: ', calc_num);
let n = new Intl.NumberFormat('en-EN').format(v);
n = dec !== undefined ? n + "." + dec : n;
$(this).val(n);
})
})
.body {
text-align: left;
}
.fields {
margin: 0 10px 0 0;
}
.fields:before {
content: "$";
text-align: center;
position: relative;
left: 35px;
}
#price {
border-radius: 5px;
margin: 15px;
padding: 10px 10px 10px 20px;
color: black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="rev-calculator">
<label for="price">Monthly Revenue</label>
<div class="fields">
<input type="text" pattern="[0-9.,]+" name="price" id="price" required data-type="number" />
<br>
</form>
我很惊讶这个问题的独特答案有很多票,因为它有一个微小但主要的缺陷:事件不应该是 keydown,它应该是 keyup。如果您使用 keydown,它不会读取您此时按下的键,而是读取前一个键。所以,请更新您的答案。
我有一个 javascript/jquery 形式的收入输入字段:
- 需要一个美元符号 :before
- 随着货币的增加添加逗号
我通过 css 显示了一个美元符号,但问题是将它居中并确保字段入口点紧挨着它而不重叠。不确定如何做逗号。欢迎任何建议或提示!
HTML:
<form id="rev-calculator">
<label for="price">Monthly Revenue</label>
<div class="fields">
<input type="number" name="price" id="price" min="0" max="10000000000" required data-type="number"> </input>
<br>
</form>
CSS:
<style>
.body {
text-align: left;
}
.fields {
margin: 0 10px 0 0;
}
.fields:before {
content: "$";
text-align: center;
position: relative;
left:30px;
}
#price {
border-radius: 5px;
margin: 15px;
padding: 10px;
color: black;
}
</style>
JS:
<script>
$('#rev-calculator').on('click', 'button', function(e) {
e.preventDefault();
var price = $("#price").val();
console.log(price);
})
</script>
代码笔:https://codepen.io/kedarPE/pen/JjroYyb
input field
好吧,这是一个方法,虽然实际上并不像我开始走这条路时所希望的那么简单。您可以使用 Intl.NumberFormat 在其中获取逗号(根据语言环境)。为了容纳小数,我在开始时嗅探它们并将它们附加到结果中。
为了允许使用逗号,我将其设为具有模式属性的文本字段。另外,我调整了你的 CSS 使 $
看起来更漂亮$('#price').keydown(function(e) {
setTimeout(() => {
let parts = $(this).val().split(".");
let v = parts[0].replace(/\D/g, ""),
dec = parts[1]
let calc_num = Number((dec !== undefined ? v + "." + dec : v));
// use this for numeric calculations
console.log('number for calculations: ', calc_num);
let n = new Intl.NumberFormat('en-EN').format(v);
n = dec !== undefined ? n + "." + dec : n;
$(this).val(n);
})
})
.body {
text-align: left;
}
.fields {
margin: 0 10px 0 0;
}
.fields:before {
content: "$";
text-align: center;
position: relative;
left: 35px;
}
#price {
border-radius: 5px;
margin: 15px;
padding: 10px 10px 10px 20px;
color: black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="rev-calculator">
<label for="price">Monthly Revenue</label>
<div class="fields">
<input type="text" pattern="[0-9.,]+" name="price" id="price" required data-type="number" />
<br>
</form>
我很惊讶这个问题的独特答案有很多票,因为它有一个微小但主要的缺陷:事件不应该是 keydown,它应该是 keyup。如果您使用 keydown,它不会读取您此时按下的键,而是读取前一个键。所以,请更新您的答案。