解决Input输入中文重复出现拼音

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

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

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

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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值