【问题标题】:vuejs add comma to numbers while typingvuejs在输入时为数字添加逗号
【发布时间】:2020-01-16 09:33:23
【问题描述】:

我想在输入时在我的数字中添加分隔符,但它不起作用。

代码

<el-input-number v-model="form.qty" style="width: 100%;" id="test" placeholder="Quantity" controls-position="right" v-on:keyup="handleChange" :min="1"></el-input-number>

methods: {
    handleChange: function(value) {
        let vm = this;
        console.log(value);
        const result = value.toString().replace(/\D/g, "")
            .replace(/\B(?=(\d{3})+(?!\d))/g, ",");
            Vue.nextTick()
            .then(function () {
                vm.form.qty = result
            });
    },
}

问题

目前,当我输入数字时没有逗号添加到输入字段,但是当我将我的值发送到后端时,它会用逗号发送它。。 p>

我需要什么

我需要的是与我上面解释的完全相反的行为,

  1. 在视图中显示带逗号的数字
  2. 不带逗号将其发送到后端

有什么想法吗?

【问题讨论】:

  • 要发送干净的值,我建议您使用@输入事件。用于过滤值使用 @change 事件
  • @MaksimTikhonov 好的!我已将其更改为@change="handleChange" 现在呢?我仍然无法在我的输入字段中获得任何更新:/
  • 因此您必须在更改事件上格式化值并在发送到后端之前在 inout 上清除它
  • ...........怎么样?
  • 如果你想发送干净的整数使用: const cleanValue = parseInt(value.split(',').join(''));如果要使用逗号显示数字,请使用 String(value).replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");跨度>

标签: javascript vue.js vuejs2


【解决方案1】:

我不使用 ElementUI,因此我无法确认 el-input-number 是否会接受格式化的字符串值。该组件可能会在内部从 value 属性中删除所有非数字字符。但是,以下解决方案适用于标准文本输入。

为了显示不同于您存储的内容,您需要将v-model 指令拆分回其原始部分。 v-model 只是在单个指令中绑定 value@input 的快捷方式。您应该将未格式化的数字存储在 form.qty 字段中,但通过计算属性为 el-input-number 组件提供格式化数字,如下所示:

<template>
  <!-- INSTEAD OF v-model, use :value and @input -->
  <el-input-number :value="formattedQty" @input="handleQtyInput" />
</template>

<script>
export default {
  data () {
    return {
      form: {
        qty: "0",
      }
    }
  },

  computed: {
    formattedQty () {
      //Add the commas back to the string
      let qty = this.form.qty + ""
      return qty.replace(/\B(?=(\d{3})+(?!\d))/g, ",")
    }
  },

  methods: {
    handleQtyInput (newValue) {
      //Make sure the stored qty is not formatted
      this.form.qty = newValue.toString().replace(/\D/g, "")
    }
  }
}
</script>

【讨论】:

  • 上面写着:[Vue warn]: Error in render: "TypeError: this.form.qty.replace is not a function"
  • 这可能是由于this.form.qty的初始状态为null或数值导致的。我已经用一种处理这种情况的方法更新了 formattedQty 计算属性。
  • 嗨,谢谢,但什么也没发生,我不会收到错误,格式化数字也不会:/
  • 输入字段中是否显示未格式化的数字?如果是这样,el-input-number 不允许格式化文本。
  • 是的,当我使用el-input 而不是el-input-number 时,它会显示格式化的数字,但是在我点击输入之外而不是在我输入数字时显示格式化数字
【解决方案2】:

我认为这只是反应性问题,而不是使用 = use $set。

handleChange(value) {
        console.log(value);
        let vm = this;
        let res = value.toString().replace(/\D/g, "")
            .replace(/\B(?=(\d{3})+(?!\d))/g, ",");
        console.log(res)
        this.$set(this.form,'num',res);

      }

小提琴 - https://jsfiddle.net/PratikPatel227/tLx3z96a/28/

发送数据时使用 - this.form.num.replace(/,/g, '')

【讨论】:

  • 我认为反应性不是问题。简单的分配在这里应该可以正常工作。此外,您没有解决 OP 的“我需要什么”部分的第二部分,即“不带逗号将其发送到后端”。请注意,我没有否决了你。只是发表评论。
  • 不幸的是它没有用,结果和我自己的代码一样,哦,我也确实将你的代码从 num 更改为 qty `this.$set(this.form,'qty',res) ;` 我知道 :)
  • 您还需要将 更改为 请参考它在 fiddle 中工作的 fiddle。
猜你喜欢
  • 2012-02-27
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 2017-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多