【问题标题】:How can I disable all dot on input type number ? vue.js 2如何禁用输入类型编号上的所有点? Vue.js 2
【发布时间】:2017-10-09 15:55:00
【问题描述】:

我的html代码是这样的:

<div id="app">
  <input type="number" v-model="quantity"/>
</div>

我的 vue 组件是这样的:

new Vue({
  el: '#app',
  data: {
    quantity: ''
  },
  watch: {
    quantity (val) {
      this.quantity = val.replace('.', '')
    }
  }
})

演示和完整代码如下:https://jsfiddle.net/50wL7mdz/67375/

例如

我输入10.2,会自动变成102

如果我输入10..2,它不会自动成为102

所以如果多个点,它不起作用

我该如何解决这个问题?

【问题讨论】:

  • @str,它不是重复的。我试过了。我试试:this.quantity = val.replace(/\./g, '') 不起作用
  • 当输入像 10.. 这样的无效数字时,type="number" 会将值设为空

标签: javascript vue.js vuejs2 vue-component


【解决方案1】:

因为你使用的是type="number",所以浏览器在做一些内部处理,所以输入的value(绑定到你的变量)是一个数字,与盒子。

特别是,如果框中的文本不是有效数字,则内部值为空。当您键入一个“.”时,该值不会改变:10.10 是相同的数值。当您键入第二个“.”时,该值变为无效,因此内部值为空。有点令人困惑的是,您在输入中输入的内容仍然可见,但 there is no way to get at it

您的选择是停止使用type="number",在这种情况下,您的代码将按照编写的方式运行(但您没有用于更改值的向上和向下箭头功能),或者做一些棘手的事情。

更新:通过强制使用规范化版本的号码,下面的解决方案效果相对较好。需要注意的是,每次进行更改时,光标都会移动到数字的末尾。你可以解决这个问题,但是it's somewhat complicated 所以我没有在这里做。

new Vue({
  el: '#app',
  data: {
    quantity: ''
  },
  computed: {
    ppQuantity: {
      get() {
        return this.quantity;
      },
      set(val) {
        this.quantity = '';
        this.$nextTick(() => {
          this.quantity = val.replace('.', '');
        });
      }
    }
  }
})
<script src="https://unpkg.com/vue"></script>

<div id="app">
  <input type="number" v-model="ppQuantity">
</div>

【讨论】:

  • 它有效。但是如果我输入 102 然后在 10 和 2 之间单击。然后我输入点,它可能是输入点。结果:10.2
  • 更新了 sn-p。
  • 好的。谢谢。看来你的解决方案是最好的解决方案
  • 也许你可以帮助我。看看这个:stackoverflow.com/questions/49460980/…
猜你喜欢
  • 1970-01-01
  • 2018-03-20
  • 2018-06-01
  • 2016-12-27
  • 1970-01-01
  • 2019-01-26
  • 2015-09-20
  • 2019-05-14
  • 2014-03-04
相关资源
最近更新 更多