[英]Setting max and min limit on input field?
我遇到了这个问题,我有一个 vuetify 文本字段,我正在尝试为其设置最大和最小限制。 现在设置 min=0 和 max=10 有效,但似乎您仍然可以粘贴大于 10 的值。
这是一个代码笔
<div id="app">
<v-app id="inspire">
<v-container>
<v-layout row wrap>
<v-text-field
type="number"
min=0
max=10
onkeyup="if(this.value > 10) this.value = 10;">
</v-text-field>
</v-layout>
</v-container>
</v-app>
</div>
new Vue({
el: '#app',
data() {
return {
}
}
})
使用 onkeyup 有效,但您仍然可以粘贴大于 10 的值,如果您在外部单击,则会显示大于 10 的值。
使用 oninput 并且我不会对值进行硬编码
oninput="if(Number(this.value) > Number(this.max)) this.value = this.max;"
您可以手动将属性放在输入元素上(虽然这个解决方案不清楚,实际上我会称之为hack,但很容易做到)
将 $ref 放在您的字段上
<v-text-field ref="myfield" ... >
然后你可以修改它为mounted
mounted () {
const inputElement = this.$refs.myfield.$el.querySelector('input')
inputElement.min = 0
inputElement.max = 10
}
您还可以修改任何其他属性,如step
或maxLength
(用于文本类型)。 参考输入元素 API https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement
您也可以为此使用数据规则。
例如:内部数据
data(){
organization: "",
organizationRules: [
(v) => !!v || "Organization is required",
(v) =>
(v && v.length <= 50) ||
"Organization must be less than 50 characters",
],
}
内模板
<template>
<v-text-field
v-model="organization"
:counter="50"
:rules="organizationRules"
label="Organization"
required
></v-text-field>
</template>
改用onblur
以便在输入变得不集中时,代码会运行以将其设置为最大值
可以对这个问题使用观察者。 我不知道这是否是最好的方法,但它有效。
<div id="app">
<v-app id="inspire">
<v-container>
<v-layout row wrap>
<v-text-field
v-model="number"
type="number"
min=0
max=10>
</v-text-field>
</v-layout>
</v-container>
</v-app>
</div>
new Vue({
el: '#app',
data() {
return {
number: 0
}
},
watch: {
number (val, old) {
console.log(val, old)
if (+val > 10) {
this.number = 10
}
}
}
})
如果你想在小数点前后最多有 2 位数字,那么这里是实现
模板
<v-text-field v-model="input" v-on:keyup="handleInput" type="number" oninput="if(Number(this.value) > Number(this.max)) this.value = this.max;" max="99" ></v-text-field>
脚本
handleInput(e) {
let stringValue = e.target.value.toString();
let regex = /^\d{0,2}(?:\.\d{1,2})?$/;
if (!stringValue.match(regex) && this.budget !== "") {
this.budget = this.previousPrice;
}
this.previousPrice = this.budget;
},
您可以根据需要自定义正则表达式
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.