element 中 input [ type = number ] 光标 bug 整改

Pagination 分页光标bug整改

在分页器的文本框中输入数字是没问题的;但是如果我们只输入中文,他的光标就会跑到左边,不再是居中的效果
在这里插入图片描述

1、先来排除 bug 是否与框架有关:
在这里插入图片描述
我们可以看到他用的是一个type=“number” 的 input,准备一个纯html的代码进行尝试,发现也有类似的问题,说明bug跟框架是没关系的。

<input type="number" style="text-align: center;">

在这里插入图片描述

2、解决问题方案

<!-- 绑定一个 oninput 事件,传入 event -->
 <input type="number" style="text-align: center;" oninput="fixInvalidChar(event)">
 function fixInvalidChar(e){
    console.log(e);
 }

在这里插入图片描述
我们发现当我们输入中文后,点击确定时 e.data 就会等于一个空字符串,然后我们进行一个判断就好了:

纯html解决方案

 function fixInvalidChar(e){
 // 判断e.data 为空,且 e.target.value 为空
   if(e.data === '' && e.target.value === ''){
   	  // 将他的值设置为 '0'
      e.target.value = '0'
      // 设置计时器再将 0 清空
      setTimeout(() => {
        e.target.value = ''
      }, 0);
   }
 }

3、针对vue解决方案

 <!-- 给分页组件设一个 ref 方便在 $refs 中能取到他 --> 
 <el-pagination
      ref='pagination'
      :current-page="1"
      :page-sizes="[100, 200, 300, 400]"
      :page-size="100"
      layout="total, sizes, prev, pager, next, jumper"
      :total="1000"
 />

vue2中element-ui解决方案:

 // vue2
 mounted(){
	this.$refs.pagination.$el.querySelector('input[type=number]').oninput = (e) =>{
		if(e.data === '' && e.target.value === ''){
      		e.target.value = '0'
      		setTimeout(() => {
        		e.target.value = ''
     		}, 0);
   		}
	}
 }

vue3中element-plus解决方案:

 // vue3
 import { ref, onMounted } from 'vue';
 const pagination: any = ref(null)
 onMounted(() => {
	pagination.value.oninput = (e) =>{
		if(e.data === '' && e.target.value === ''){
      		e.target.value = '0'
      		setTimeout(() => {
        		e.target.value = ''
     		}, 0);
   		}
	}
 })
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值