博主信息
富贵人生
博文
87
粉丝
0
评论
0
访问量
3176
积分:0
P豆:174

【前端】手机号码输入框添加 空格

2021年10月11日 19:49:11阅读数:32博客 / 富贵人生

移动端 手机号码输入框,设置成 134 6005 1078 自动添加空格形式
问题: 【当需要修改其中的数字时(6005),删除该数字后 光标会马上跳到数字末尾】
需求: 【删除其中的数字后,光标不会跳到最后,能正常修改】
请求各位同事,老师 ,大神帮忙一下,这个bug挂在我这里好久了,谢谢谢谢!!

代码如下
return function(input, space) {

 if (!input) {return ''}
space = space || ' 'input = input.replace(/\s+/g, '') // 去掉所有空格var valArry = input.split('')if (valArry.length > 7) {
valArry = valArry.splice(7, 0, space)
}if (valArry.length > 3) {
valArry = valArry.splice(3, 0, space)
}return valArry.join('');
}

我是用 keyup 事件触发的

回答

<html><head>
   <meta charset="utf-8">
   <script>
 

   function Mobile(obj,e){            if(e.keyCode == 8) return
           var value = obj.value;            console.log(value)
           value = value.replace(/\s*/g, "");            var result = [];            for(var i = 0; i < value.length; i++){                if (i==3||i==7){
                   result.push(" " + value.charAt(i));
               }                else{
                   result.push(value.charAt(i));
               }
           }
           obj.value = result.join("");
   }    </script>
   <style>
       div{            height: 100px;            background: #ccc;            vertical-align: center;
       }    </style></head><body>
      <input type="tel" maxlength="13" id="mobile" onkeyup="Mobile(this,event)" onfocus="value=''" />
      <div>
          <input type="text">
      </div></body></html>

我试着写了写 我看符合你的要求 我修改了 我这边测试没问题

你需要记住光标位置,改变之后,重新设置<a rel="dofollow" href="https://www.fgba.net/" title="QQ靓号购买平台"><span style="color: rgba(77, 77, 77, 1)">QQ靓号购买平台</span></a><a rel="dofollow" href="https://www.fgba.net/sitemap.xml" title="地图"><span style="color: rgba(77, 77, 77, 1)">地图</span></a>光标位置

因为你在keyup的时候,重新给input赋值了,所以光标会定位到最后。
直接上代码。

<input onkeyup="dealKeyup(this);"/>
const getCursortPosition = (ctrl) => {    var CaretPos = 0;   // IE Support
   if (document.selection) {
       ctrl.focus();        var Sel = document.selection.createRange();
       Sel.moveStart ('character', -ctrl.value.length);
       CaretPos = Sel.text.length;
   }    // Firefox support
   else if (ctrl.selectionStart || ctrl.selectionStart == '0')
       CaretPos = ctrl.selectionStart;    return (CaretPos);
}// 设置光标位置const setCaretPosition = (ctrl, pos) => {    if(ctrl.setSelectionRange) {
       ctrl.focus();
       ctrl.setSelectionRange(pos,pos);
   }    else if (ctrl.createTextRange) {        var range = ctrl.createTextRange();
       range.collapse(true);
       range.moveEnd('character', pos);
       range.moveStart('character', pos);
       range.select();
   }
}// 光标定位const dealKeyup = (that) => {  var pos = getCursortPosition(that);
 setCaretPosition(that,pos - 1);
}

根据自己的需求改改dealKeyup这个方法就可以了。


版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论