使用和不使用小数来确定价格

时间:2016-03-29 12:56:24

标签: javascript jquery

我的代码有一个小问题,它正在工作但不是我想要的方式。

$('.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中 - 但是当符号在值中时它会出错。

1 个答案:

答案 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));