【发布时间】:2019-03-16 10:46:01
【问题描述】:
我希望文本输入只接受一个数字序列。任何其他字符都应该被忽略。这是我的组件的简化版本:
<template>
<div id="app">
<input :value="tel" @input="setTel" placeholder="only numbers" />
<p>{{ tel }}</p>
</div>
</template>
<script>
export default {
name: "App",
data: () => ({
tel: "1234"
}),
methods: {
setTel(v) {
const val = v.target.value.replace(/[^0-9]/g, "");
this.tel = val;
/*this.tel = v.target.value = v.target.value.replace(/[^0-9]/g, "");*/
}
}
};
</script>
在 React 中,有 controlled components 的概念,但在 Vue 中似乎没有类似的东西。
我找到的解决方法(您可以在 cmets 中看到)是手动修改输入元素的值,但这有点违背了使用 Vue 的目的。
我也尝试过使用v-model,但问题仍然存在。
【问题讨论】:
-
尝试使用
<input type='number' ... -
你实际上可以用普通的 JS 来实现这一点,
function formatNumber(element) { element.value = Number(element.value.replace(/[^0-9]/g, '')).toLocaleString(undefined, { maximumFractionDigits: 2 }); }也可以尝试使用 keyUp 事件。 -
@BoussadjraBrahim 需要使用
type='text,这种情况比^[0-9]*$更通用 -
@UgoOkoro 这就像我找到的解决方法,但是直接修改输入元素感觉不对。检查示例中的
this.tel,您可以看到它得到了正确的值,只是视图没有更新......
标签: javascript vue.js vuejs2