【问题标题】:jQuery - Setting number input value as float in FirefoxjQuery - 在 Firefox 中将数字输入值设置为浮点数
【发布时间】:2017-04-29 06:49:31
【问题描述】:

我有一个绑定到特定类(附加到数字类型输入)的模糊事件的函数,该函数旨在强制保留两位小数。以下函数在 Chrome 中有效,但在 Firefox 中无效。

代码:

/**
 *	Force 2 decimal places for specified inputs
 *
 */
$(document).on('blur', '.to-dec', function() {

  // get value
  var value = $(this).val();

  // no value
  if (!value) return;

  // cast to 2 decimal places
  value = parseFloat(value).toFixed(2);

  // update value
  $(this).val(value);

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="number" class="to-dec" min="0" step="0.01" required>

如果我在设置之前输出value,我会得到预期值(即输入值为 3 时为 3.00)。

有人知道为什么 Firefox 会阻止设置这个值吗?在使用val() 设置值时,我已经尝试使用parseFloat()

谢谢!

【问题讨论】:

  • 看起来 Firefox 会自动删除 type=number 中的无关紧要的数字
  • @Barmar 是的,我刚刚发现了 3 年前的这个错误报告:bugzilla.mozilla.org/show_bug.cgi?id=1003896 由于这个问题不会影响我的功能,我想我会让它飞起来。

标签: jquery html firefox floating-point


【解决方案1】:

使其在 FireFox 中工作的一种简单方法是将输入类型设置为“文本”,并通过对代码稍作修改来保持类型编号行为,例如如果值为 NaN,则清除输入。

$(document).on('blur', '.to-dec', function() {
  // get value
  var value = $(this).val();
  if (isNaN(value)) {
    $(this).val('');
  } else if (!value) {
    // no value
    return;
  } else {
    // cast to 2 decimal places
    value = parseFloat(value).toFixed(2);
    // update value
    $(this).val(value);
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" class="to-dec" min="0" step="0.01">

【讨论】:

  • 感谢您的回答。我忘记在我的代码示例中包含“必需”属性。每当字段更改以确定用户是否可以继续表单中的下一步时,我都会验证页面上每个字段的有效性。我想保留“数字”输入类型,以便在输入无效值(例如负数)时仍显示红色的“必填”边框。但是,我也可以在这个函数中处理这些限制。
猜你喜欢
  • 1970-01-01
  • 2015-03-12
  • 2014-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多