zoukankan      html  css  js  c++  java
  • 解决Input输入中文重复出现拼音

      下面的代码,是我们再做一个正则的判断,不让输入我们列举的特殊符号。大部分情况下是没有问题的,可是在少数人的电脑上,发现,在输入中文的时候,会有重复的情况。请看下面的动图

    1 <p>输入中文,只使用oninput和onkeyup的方式</p>
    2     <input type="text" name="" id="input" placeholder="不能输入特殊符号"
    3     oninput="value=value.replace(/[`~!#$%^&*()_+=<>?:'{}|~!#¥%……&*()={}|《》?:“”【】、;‘’,。、s+]/g, '')">

    我们猜想,这个和输入法有关,经过查找,发现了确实是这样的。具体问题请自行百度,或者查看链接。貌似是微软的输入法的问题,我试了搜狗输入法没问题。但是不能所用的用户舍弃微软的输入法。前端其实也是有解决办法的,就是使用

    compositionend方法,这个是再当我们文本输入段落完成之后会触发这里的事件。详细请看这里,知道了这个事件, 其实问题解决起来就很简单了。
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7     <title>Document</title>
     8 </head>
     9 
    10 <body>
    11     <p>输入中文,只使用oninput和onkeyup的方式</p>
    12     <input type="text" name="" id="input1" placeholder="不能输入特殊符号" 
    13          oninput="value=value.replace(/[`~!#$%^&*()_+=<>?:'{}|~!#¥%……&*()={}|《》?:“”【】、;‘’,。、s+]/g, '')" /> 
    14     <p>输入中文,使用compositionend事件监听</p>     
    15     <input type="text" name="" id="" class="input2" placeholder="不能输入特殊符号" /> 
    16 </body>
    17 <script>
    18     let input = document.querySelector('.input2');
    19 
    20     input.addEventListener('compositionstart', function (event) {
    21         inputLock = true;
    22         console.log('compositionstart', checkLength(event.target.value), event);
    23     });
    24     input.addEventListener('compositionend', function (event) {
    25         inputLock = false;
    26         console.log('compositionend', checkLength(event.target.value), event);
    27     });
    28     function checkLength(data){
    29         console.log(data)
    30         input.value = data.replace(/[`~!#$%^&*()_+=<>?:'{}|~!#¥%……&*()={}|《》?:“”【】、;‘’,。、s+]/g, '')
    31     }
    32 </script>
    33 
    34 </html>

    通过这个事件触发的话,就不会出现上面GIF图的问题了。

  • 相关阅读:
    C++内嵌汇编代码,简单文件加密
    汇编查看StackFrame栈帧
    cdecl和stdcall调用约定-汇编演示
    汇编获取键盘输入,及改变文本颜色
    XLAT转码:以DS:【BX+AL】为地址,提取存储器中的一个字节再送入AL
    应中DOS中断显示字符串(摘自《汇编语言》王爽)
    汇编显示彩色字
    汇编ASCII大小写转换(字符串长度$的用法)
    SQLite.net发布后找不到"SQLite.Interop.dll"的问题
    linux使用shutdown.sh命令关闭不完tomcat进程的处理方法
  • 原文地址:https://www.cnblogs.com/daniao11417/p/14927424.html
Copyright © 2011-2022 走看看