【问题标题】:Update input (type="Number") with two digits用两位数更新输入 (type="Number")
【发布时间】:2015-06-08 21:19:18
【问题描述】:

我正在尝试使用纯 Javascript(如果可能,不要使用 jquery)。 我需要更新输入框的值,使其看起来像这样:01。我的用例是用于 MM 和 DD 输入框(主要是为了美观)。使用输入轮时,它会随着12 的增加而增加……我希望它像这样增加:0102……

【问题讨论】:

  • 您能提供您尝试过的代码供我们查看吗?
  • 当您单击滚轮时似乎不是很好的用户体验,但是在文本框的 change 事件上抛出一些东西来更改文本框值似乎有效。
  • 输入的数字类型不能有前导零。 stackoverflow.com/questions/8437529/…
  • 目前我没有任何代码 - 我之前的尝试只是在前面加上 0。我知道这不是假设但在考虑之后我可以解析出0 然后手动更新它......但这只是一个巨大的痛苦
  • @hhsnopek 给你,大致的想法就在那里:stackoverflow.com/questions/7790561/…

标签: javascript html


【解决方案1】:

感谢@Daemedeor 将我带到这里:

这会将类型更改为 text 并在模糊前添加 0。在焦点上,它会将text 类型更改回number 类型并删除前导0。您所要做的就是设置输入的样式,这样它们就不会改变宽度。

    (function() {
      var monthInput = document.getElementById('month');
      var dayInput = document.getElementById('day');

      var prependZero = function() {
        if (this.value === '') return;

        event.target.setAttribute('type', 'text');
        if (this.value.indexOf('0') === -1  && this.value.length !== 2) this.value = '0' + this.value;
      };

      var removeZero = function() {
          this.value = this.value.split('0')[1];
          this.setAttribute('type', 'number');
      };

      dayInput.addEventListener('blur', prependZero, false);
      dayInput.addEventListener('focus', removeZero, false);
      monthInput.addEventListener('blur', prependZero, false);
      monthInput.addEventListener('focus', removeZero, false);
    })();

【讨论】:

  • 但要小心,查看函数,似乎您可能想要检查长度,确保它不像 10/11/12 或任何长度为 2 或更大的数字,因为这可能也是不可取的
  • 是的,我在本地遇到了这个问题并修复了它,但没有在这里更新。我已经更新了,谢谢提醒:)
  • 我知道您只要求提供月份和日期,但如果您的输入没有 max 和 min 属性,请不要忘记确保长度不大于 2 而不是只需两个 ~ 以防用户超过 30 天
  • 在这种情况下,我添加了侦听器以通知输入无效,使用 UI/UX
猜你喜欢
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 1970-01-01
  • 2017-10-25
  • 1970-01-01
相关资源
最近更新 更多