大佬们,二次封装了vant的组件,主要效果是用户输入的银行卡号自动4位分割出来一个空格,给后端提交数据的时候呢又是去掉空格的,功能是没问题,但是如果在input中间添加或者删除内容时光标会自动跳到末尾去,如何计算光标位置太难了,求助大佬们,非常感谢
<template> <van-field v-model="innerValue" v-bind="$attrs" v-on="$listeners" > <template v-for="(index, name) in $slots" :slot="name"> <slot :name="name" /> </template> </van-field></template><script>export default { inheritAttrs: false, model: { event: 'filtered' }, props: { value: { default: '' }, }, data() { return {} }, computed: { innerValue: { get() { return this.value.replace(/\D/g, '').replace(/(\d{4})(?=\d)/g, '$1 ') }, set(value) { this.$emit('filtered', value.replace(/\D/g, '')) } } }, methods: {}}</script>
<template> <van-field v-model="innerValue" v-bind="$attrs" v-on="$listeners" ref="inputField" > <template v-for="(index, name) in $slots" :slot="name"> <slot :name="name" /> </template> </van-field></template><script>export default { inheritAttrs: false, model: { event: 'filtered' }, props: { value: { default: '' }, }, data() { return { oldFormattedValue: '' // 保存上一个格式化值 } }, computed: { innerValue: { get() { return this.value.replace(/\D/g, '').replace(/(\d{4})(?=\d)/g, '$1 ') }, set(value) { const newValue = value.replace(/\D/g, ''); this.$emit('filtered', newValue); this.adjustCursorPosition(newValue); this.oldFormattedValue = this.innerValue; } } }, methods: { adjustCursorPosition(newValue) { const input = this.$refs.inputField.$el.querySelector('input'); const oldPos = input.selectionStart; // 计算旧格式化值和新格式化值之间的差异 const oldFormattedValueDiff = this.oldFormattedValue.slice(0, oldPos).split(' ').length - 1; const newFormattedValueDiff = this.innerValue.slice(0, oldPos + oldFormattedValueDiff).split(' ').length - 1; const diff = newFormattedValueDiff - oldFormattedValueDiff; // 调整光标位置 const newPos = oldPos + diff; input.setSelectionRange(newPos, newPos); } }}</script>
问题内容: 在JavaScript中,如何格式化日期对象以打印为? 问题答案: 对于自定义分隔的日期格式,你必须从DateTimeFormat对象(属于ECMAScript Internationalization API的一部分)中提取日期(或时间)组件,然后手动使用所需的分隔符创建字符串。 为此,你可以使用DateTimeFormat#formatToParts: 你还可以使用来一对一地提取各
问题内容: 在JavaScript中,从浮点数转换为字符串时,小数点后仅能获得2位数字吗?例如,用0.34代替0.3445434。 问题答案: var result = Math.round(original*100)/100; 具体细节,以防代码不言自明。 编辑:…或按照TimBüthe的建议使用。忘了那个,谢谢(和赞扬):)
在JavaScript中,大家都知道著名的计算:。但是为什么JavaScript打印这个值,而不是打印更精确、更精确的呢?
严重:web应用程序创建了一个ThreadLocal,其键类型为[org.apache.log4j.helpers.ThreadLocalMap](值为[org.apache.log4j.helpers.ThreadLocalMap@3ac5b23e])和值类型为[java.util.Hashtable](值为[{userhost=192.168.15.90,userid=127,username
您是否碰巧知道如何返回(并进一步返回)到Visual Code Editor中以前的光标位置? 到目前为止,我所做的只是快速的“撤消”和“重做”,只是为了看看我在哪里,但这不仅是愚蠢的,而且非常有限,因为它可以回到最后一个光标位置,而不是无法进一步返回。 用例场景: < li>1)您在1号线,在那里做了一些事情。 < li>2)然后,您转到第100行,并在那里做了其他事情。 < li>3)您转到第
本文向大家介绍详解JavaScript时间格式化,包括了详解JavaScript时间格式化的使用技巧和注意事项,需要的朋友参考一下 感谢某前辈写的JS格式化日期和时间JS代码,很好很强大!!! 前言: js虽然提供了各种获取时间Date对象的不同属性方法,如:getDate 方法 | getDay 方法 | getFullYear 方法 | getHours 方法 ... ... 等等,但是却