中文拼音輸入法在input監(jiān)聽的問題(監(jiān)聽字節(jié)數(shù))

監(jiān)聽文本輸入框的input 和propertychange事件,在拼寫漢字(輸入法)但漢字并未實際填充到文本框中(選詞)時會觸發(fā)input 和propertychange 事件

現(xiàn)在有一個需求需要監(jiān)聽input的框的字節(jié)數(shù),超出10個字符或者20個字節(jié)不能繼續(xù)輸入了

超出10個字符或者20個字節(jié)不能繼續(xù)輸入

正常的情況超過十個字符的話我們可以用input 的maxlength屬性,但是用length來判斷的話數(shù)字和字母也會算一個length,所以在這里我們不能用這個屬性

最初我的思路是:
用input 和propertychange 事件監(jiān)聽字節(jié)數(shù)的改變實時修改輸入的字數(shù)
用jquery的blur 當輸入域失去焦點去截取10個字符或者20個字節(jié)的輸入內(nèi)容

但是交互感覺不太好,我可愛的同事sket發(fā)現(xiàn)了一個屬性監(jiān)聽中文輸入發(fā)的輸入compositionstart, compositionend
當文本段落的組成完成或取消時, compositionend 事件將被激發(fā) (具有特殊字符的激發(fā), 需要一系列鍵和其他輸入, 如語音識別或移動中的字詞建議)。所以我用compositionend替換了blur事件去做操作,體驗好了很多
相關解決辦法的文章
具體的文檔請點擊這里

demo的案例請點擊這里

codepen 上運行
jsfiddle 上運行

上代碼:
input.html

<div class="name-body">
  <input type="text" id="name">
  <strong class="numberMain"><span class="numberReal">0</span>/10</strong>
</div>

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){
   //獲取截取字節(jié)長度之后的字符串
   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
    }
   }
   }
});
/**
*獲取字符串的字節(jié)長度
*/
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;  
} 

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,527評論 19 139
  • 本節(jié)介紹各種常見的瀏覽器事件。 鼠標事件 鼠標事件指與鼠標相關的事件,主要有以下一些。 click 事件,dblc...
    許先生__閱讀 2,838評論 0 4
  • 想寫自己能夠記住的至今的人生記憶,所以才有了現(xiàn)在這個系列。 現(xiàn)在的我,已經(jīng)分不清楚自己的童年和少年時期的記憶了,只...
    雷雷莫閱讀 687評論 0 2
  • 無意中知道這部小說,選擇看一下。 可是讀起來,卻放不下了。 每每讀到春草為生活所迫,再次走入絕境,總會流著淚讀下去...
    趙筱舒閱讀 1,514評論 0 1
  • 我把窗簾 拉到陽光折射 到枕頭的位置 我把茶包 塞進杯子外 條紋硅膠隔熱層 我把沙發(fā) 紫色格子裝飾布 鋪了又鋪 我...
    向日葵愛呀愛太陽閱讀 140評論 0 0

友情鏈接更多精彩內(nèi)容