javascript - 数字输入中的 Google Chrome Android 逗号 (Bootstrap-Vue)
问题描述
首先:除适用于 Android 的 Google Chrome (90.0.4430.210) 外,其他任何浏览器均不会出现此问题。
我们有一个看起来像这样的输入。只能输入数字。我们的输入看起来像这样。
<b-form-input
v-model="manualInput"
class="text-center text-primary bold font-weight-bold"
id="manInput"
type="number"
inputMode="numeric"
pattern="[0-9]*"
min="1"
max="20"
@keypress="checkValidation($event)"
@keyup="checkValidation($event)"
@mouseup="checkValidation($event)"
@paste="onPaste($event)"
/>
(“onPaste”事件并不重要,它基本上可以防止用户粘贴任何内容)
private checkValidation(evt) {
console.log(this.manualInput);
//Check if there is an input
if (this.manualInput.length) {
//At least one number
var stamps: number = +this.manualInput;
//Check if the input is valid (just in case)
if (stamps < this.min || stamps > this.max || !this.manualInput.match("[0-9]{1,3}")) {
//Input is invalid
this.showAlert = true;
this.isValid = false;
} else {
//Input is valid
this.showAlert = false;
this.isValid = true;
}
} else {
//No content
this.showAlert = false;
this.isValid = false;
}
}
正如我已经说过的,这在所有桌面浏览器、firefox(移动)和 safari(移动)上都能完美运行。但在android上,可以输入逗号和点!
现在是奇怪的部分:我尝试用函数的第一行中的逗号和点替换this.manualInput.replace(".", "").replace(",", "")
。但是,当您只输入一个逗号时,输入字符串仍然是空的。当我在控制台中打印字符串时,它会打印一个空字符串,即使我输入了一个逗号。只要我输入一个数字,逗号就会出现在控制台中。这显然对用户不利,因为看起来他可以输入逗号。如果有人知道为什么会发生这种情况以及如何防止它,我会很高兴。
解决方案
您可以使用formatter
如下所示:https ://bootstrap-vue.org/docs/components/form-input#formatter-support
<b-form-input
id="input-formatter"
v-model="text1"
placeholder="Enter your name"
:formatter="formatter"
></b-form-input>
<script>
export default {
data() {
return {
text1: ''
}
},
methods: {
formatter(value) {
return value.split(/ /)[0].replace(/[^\d]/g, '')
}
}
}
</script>
推荐阅读
- node.js - 更好的架构在 MongoDB 中存储多种类型的用户
- reactjs - 在 React-Select 中获取选定的值
- java - 如何在主线程下拦截 Runnable 创建和执行以使用 AspectJ 填充上下文流数据
- algorithm - 将堆栈实现为数组的成本分析?
- java - 为什么我得到空指针异常
- excel - 试图匹配数字,但在匹配浮动数字时挂断了电话
- node.js - 哪个 heroku dynos 更适合 1500 多个活跃用户的应用程序?
- python - python中的类名未定义错误
- angular - 如何以角度将 json obj 值传递给 API(用于 post 方法)
- php - 如何选择组合框并输入到数据库