【发布时间】:2019-06-20 15:06:15
【问题描述】:
我有一个输入,用户可以在其中输入日期,在输入时我想将其值格式化为DD/MM/YYYY。因此,当输入值与所需格式匹配时,我想限制用户输入。
<template>
<input v-model="dob" @input="handleInput">
</template>
<script>
export default {
data() {
return {
dob: ""
};
},
methods: {
handleInput(e) {
let value = e.target.value;
this.dob = this.$options.filters.formatTo(value, "date");
}
}
};
</script>
这是我试过的过滤器,
Vue.filter('formatTo', function(value, format) {
const formats = {
date: {
blocks: [2, 2, 4],
delimeter: '/'
}
};
if (!value || !(format in formats)) return;
const { blocks, delimeter } = formats[format];
const numberOfBlocks = blocks.length - 1;
const maxLength = numberOfBlocks + blocks.reduce((a, b) => a + b, 0);
let index = -1;
value = value.toString().split('');
blocks.map(block => {
index += block + 1; // here +1 is for delimeter
value.splice(index, 0, delimeter);
});
// remove excess values
value.length = value.length > maxLength ? maxLength : value.length;
return value.join('').trim();
});
【问题讨论】:
-
你尝试了什么...?
-
@sajahan 更新
-
@Ace 我想在输入时格式化它,在输入日后自动添加
/,在输入月后添加第二个/ -
在用户打字时修改用户输入会导致糟糕的用户体验,并且需要您编写大量代码以实现零有用的功能。只需让用户输入日期,不要用你认为很酷的东西来纠缠他们,他们可能会觉得很烦。
标签: javascript validation date input vuejs2