android输入法状态监听 js,中文拼音输入法在input监听的问题(监听字节数)

监听文本输入框的input 和propertychange事件,在拼写汉字(输入法)但汉字并未实际填充到文本框中(选词)时会触发input 和propertychange 事件

现在有一个需求需要监听input的框的字节数,超出10个字符或者20个字节不能继续输入了

62ec0adb6ebb

超出10个字符或者20个字节不能继续输入

正常的情况超过十个字符的话我们可以用input 的maxlength属性,但是用length来判断的话数字和字母也会算一个length,所以在这里我们不能用这个属性

最初我的思路是:

用input 和propertychange 事件监听字节数的改变实时修改输入的字数

用jquery的blur 当输入域失去焦点去截取10个字符或者20个字节的输入内容

但是交互感觉不太好,我可爱的同事sket发现了一个属性监听中文输入发的输入compositionstart, compositionend

当文本段落的组成完成或取消时, compositionend 事件将被激发 (具有特殊字符的激发, 需要一系列键和其他输入, 如语音识别或移动中的字词建议)。所以我用compositionend替换了blur事件去做操作,体验好了很多

相关解决办法的文章

具体的文档请点击这里

demo的案例请点击这里

上代码:

input.html

0/10

input.js

var name = $("#name")

$("#name").on('input propertychange',function(){

var codeLength = getLength($(this).val()),

length = Math.floor(codeLength/2)

$('.numberReal').html(length)

})

$("#name").on('compositionend',function(){

var codeLength= getLength($(this).val()),

length= Math.floor(codeLength/2),

newStr= '',

newCodeLength= 0

if(length>10){

//获取截取字节长度之后的字符串

var arr =$(this).val().split('')

for(var value of arr){

newCodeLength += getLength(value)

newStr+=value

if(newCodeLength >=20){

$(this).val(newStr)

$('.numberReal').html(Math.floor(getLength($(this).val())/2))

break

}

}

}

});

/**

*获取字符串的字节长度

*/

function getLength(str)

{

var realLength = 0;

for (var i = 0; i < str.length; i++)

{

charCode = str.charCodeAt(i);

if (charCode >= 0 && charCode <= 128)

realLength += 1;

else

realLength += 2;

}

return realLength;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值