vue 输入电话号码自动按3-4-4分割功能的实现代码

2020-06-16 06:53:18易采站长站整理

若想光标留在删除/添加内容位置,需要设置光标位置:

修改js如下:


<script>
export default {
data () {
return {
mobile: '',
card: ''
}
},
methods: {
inputMobile (e) {
this.formatMobile(e)
this.mobile = this.$refs.mobile.value
},
formatMobile (e) {
let val = this.$refs.mobile.value // 不可直接用this.mobile,第一方便提取该方法降低代码耦合度,第二直接用this.mobile,在输入汉字时按下shift按键会导致无法再输入和删除内容
let selStart = this.$refs.mobile.selectionStart // 选中区域左边界位置
let mobileLen = val.length
let value = this.getValue(e, val).substr(0, 11) // 获取输入/粘贴内容,并截取前11位
let len = value.length
if (len > 3 && len < 8) {
value = value.replace(/^(d{3})/g, '$1 ')
} else if (len >= 8) {
value = value.replace(/^(d{3})(d{4})/g, '$1 $2 ')
}
this.$refs.mobile.value = value
if (selStart !== mobileLen) {
if (selStart === 3) {
selStart++
}
// 设置光标位置
this.$refs.mobile.selectionStart = this.$refs.mobile.selectionEnd = selStart
}
},
getValue(e, val) {
let value = ''
if (e.type === 'keyup') {
value = val.replace(/D/g, '')
} else if (e.type === 'paste') {
// window.clipboardData:IE浏览器获取剪贴板数据对象
// event.clipboardData:Chrome, Firefox, Safari获取剪贴板数据对象
let clipboardData = event.clipboardData || window.clipboardData;
value = clipboardData.getData('Text'); // 获取剪贴板text格式的数据
value = value.replace(/D/g, '')
}
return value
}
}
}
</script>

未实现:

不允许粘贴非数字内容到输入框还未实现,改为了提交时校验,如果有比较好的解决方案望大家提出

到此这篇关于vue 输入电话号码自动按3-4-4分割功能的实现代码的文章就介绍到这了,更多相关vue输入电话号码自动分割内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!