我的代码有一个小问题,它正在工作但不是我想要的方式。
$('.prices').on('change', function() {
var elm = $(this).val();
var value = (elm) ? elm.replace(/\D/, '') : '0';
$(this).val(($('#amountDeposit').val() == 2) ? parseFloat(value).toFixed(2) : value);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div class="row">
<div class="col-md-4">
<select id="amountDeposit" name="amountDeposit" class="form-control">
<option value="1">Percentage</option>
<option value="2">Fixed Amount</option>
</select>
</div>
<div class="col-md-4">
<input type="text" name="valueDeposit" class="form-control prices" value="0">
</div>
</div>
选择框中的2个值,百分比和固定金额。如果固定金额则价格需要2位小数。
如果选择了固定金额,并输入20 - JQuery将其更改为20.00 - 但如果输入20.00,则JQuery将其更改为2000.00 - 替换的想法是删除用户可以输入的任何符号,如£或%
我已经尝试将parseFloat放在elm中 - 但是当符号在值中时它会出错。
答案 0 :(得分:4)
您可以使用正则表达式/\d+(.\d+)?/
从用户输入中提取十进制数。除了十进制数字之外的任何其他内容都将被安全删除。然后,您可以在匹配时使用parseFloat
。
试试这个
$('.prices').on('change', function() {
var elm = /\d+(.\d+)?/.exec($(this).val());
var value = elm ? elm[0] : '0';
$(this).val(parseFloat(value).toFixed(2));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div class="row">
<div class="col-md-4">
<select id="amountDeposit" name="amountDeposit" class="form-control">
<option value="1">Percentage</option>
<option value="2">Fixed Amount</option>
</select>
</div>
<div class="col-md-4">
<input type="text" name="valueDeposit" class="form-control prices" value="0">
</div>
</div>
修改强>
如果$(#amountDeposit)
设置为Percentage
,您不希望允许浮点数,那么请使用以下代码段。
$(this).val(parseFloat(value).toFixed($('#amountDeposit').val() == 2 ? 2 : 0));