代码之家  ›  专栏  ›  技术社区  ›  Cannon Moyer

将HTML5数字字段增加.5,步长为.01

  •  -2
  • Cannon Moyer  · 技术社区  · 6 年前

    我有一个数字字段,我用它作为数量值,我需要以下格式的值被字段接受。

    0.01
    0.1
    1
    

    <input type="number" step=".01">
    

    字段右侧的箭头和向上/向下键盘按钮将值递增 .01

    我和jQuery监听器一起工作过 input ,但当我直接输入值时也会出现问题,因为侦听器当时也被触发了。

    2 回复  |  直到 6 年前
        1
  •  3
  •   Danny Fardy Jhonston Bermúdez    6 年前

    基本上,你需要改变它的 set 值属性介于:

    <input type="number" step=".01">

    <input type="number" step=".5"> 当用户 按向上/向下箭头或向上/向下键。

    所以,我用JavaScript做了一个例子来说明这个特殊的场景。

    像这样:

    (function() {
      var numberFields = document.querySelectorAll("input[type=number]"),
        len = numberFields.length,
        numberField = null;
    
      for (var i = 0; i < len; i++) {
        numberField = numberFields[i];
        numberField.onclick = function() {
          this.setAttribute("step", ".5");
        };
        numberField.onkeyup = function(e) {
          if (e.keyCode === 38 || e.keyCode === 40) {
            this.setAttribute("step", ".01");
          }
        };
      }
    }());
    <input type="number" step=".01">
        2
  •  1
  •   yaakov    6 年前

    你不能用数字输入,但是用文本输入,神奇的事情发生了。。。

    在这里可以使用负数,所以如果你想的话我可以编辑它,但是它在-1到0之间有点古怪。

    let input = document.getElementById('addNum');
    increment = 0.5;
    
    input.onkeydown = function(e){
      if(e.key == "ArrowUp"){
        e.preventDefault();
        let value = +this.value;
        this.value = value + increment;
      } else if(e.key == "ArrowDown"){
        e.preventDefault();
        let value = +this.value;
        this.value = value - increment;
      }
    }
    input:valid {
      border-color: #0f0;
    }
    input:invalid {
      border-color: #f00;
    }
    input {
      outline: none;
    }
    Enter a (non-negative) number:
    <input type="text" pattern="\d*[.]*\d{0,3}" id="addNum">