我想验证两个相互关联的文本字段。第一个必须小于第二个(例如最小/最大、开始日期/结束日期)。
所以对于编码部分我创建了这个
HTML:
<div id="app">
<v-app id="inspire">
<v-text-field
v-model="values[0]"
:rules="firstValidation"
></v-text-field>
<v-text-field
v-model="values[1]"
:rules="secondValidation"
></v-text-field>
</v-app>
</div>
Run Code Online (Sandbox Code Playgroud)
JS:
new Vue({
el: '#app',
data () {
return {
values: [1, 2]
}
},
computed: {
firstValidation: function () {
return [value => parseFloat(value) < this.values[1] || "Must be less than second value"]
},
secondValidation: function () {
return [value => parseFloat(value) > this.values[0] || "Must be greater than first value"]
}
}
})
Run Code Online (Sandbox Code Playgroud)
我也会在这里提供一个片段
https://codepen.io/anon/pen/NZoaew?editors=1010
当我更改一个字段的值时,另一个字段将不会重新验证。重现步骤:
第二个字段的值为 2 所以你会得到一个错误
现在表单有效但第一个字段仍然抛出错误,因为它没有重新验证。
现在此字段重新验证,您可以提交它。是否有一种机制可以在更改时重新验证其他字段,反之亦然?
我认为一个可能的解决方案是监听@input一个字段的事件,但是你将如何强制另一个字段重新验证呢?
这将验证它们,但只有在用户输入该字段后才会在该字段中显示错误:
new Vue({
el: '#app',
data () {
return {
values: [1, 2],
firstValidation: [true],
secondValidation: [true]
}
},
methods: {
validate: function (index) {
const valid = (this.values[0] - this.values[1]) < 0
if (valid) {
this.firstValidation = [true];
this.secondValidation = [true];
return;
}
if (index > 0)
this.secondValidation = ["Must be greater than first value"];
else
this.firstValidation = ["Must be less than second value"];
}
}
})Run Code Online (Sandbox Code Playgroud)
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/babel-polyfill/dist/polyfill.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@1.5.16/dist/vuetify.min.js"></script>
<div id="app">
<v-app id="inspire">
<v-text-field
v-model="values[0]"
@input="validate(0)"
:rules="firstValidation"
></v-text-field>
<v-text-field
v-model="values[1]"
@input="validate(1)"
:rules="secondValidation"
></v-text-field>
</v-app>
</div>Run Code Online (Sandbox Code Playgroud)
(我不确定为什么样式没有呈现,但它使用与您的 codepen 相同的脚本)
| 归档时间: |
|
| 查看次数: |
3709 次 |
| 最近记录: |