vue指令處理輸入框時(shí)微軟輸入法無(wú)法輸入問(wèn)題

1.環(huán)境

語(yǔ)言:vue

輸入法:微軟輸入法

2.場(chǎng)景舉例

采用指令方式實(shí)現(xiàn)一個(gè)只允許輸入中午的輸入框。但是在使用微軟輸入法時(shí),由于輸入漢字的時(shí)候在未輸入完成的時(shí)候輸入法已經(jīng)把拼音輸入到input中贰逾,這樣就會(huì)觸發(fā)我們指令邏輯導(dǎo)致拼音被清除审残,所以導(dǎo)致無(wú)法輸入先紫。

3.解決思路

使用輸入框事件compositionstart和compositionend監(jiān)聽(tīng)是否開(kāi)啟新的輸入或者結(jié)束本次輸入衩茸,如果開(kāi)啟新的輸入就不允許更新,如果結(jié)束輸入就允許更新

事件說(shuō)明:

compositionstart

文本合成系統(tǒng)如 input method editor(即輸入法編輯器)開(kāi)始新的輸入合成時(shí)會(huì)觸發(fā) compositionstart 事件藐窄。

例如资昧,當(dāng)用戶(hù)使用拼音輸入法開(kāi)始輸入漢字時(shí),這個(gè)事件就會(huì)被觸發(fā)荆忍。

compositionend

當(dāng)文本段落的組成完成或取消時(shí)格带,compositionend 事件將被觸發(fā) (具有特殊字符的觸發(fā),需要一系列鍵和其他輸入刹枉,如語(yǔ)音識(shí)別或移動(dòng)中的字詞建議)叽唱。

4.案例

Vue.directive('limitInput', ()=>{

? /* 兼容性檢測(cè)

? ? chrome:oncompositionstart--->oninput--->oncompositionend

? ? firefox: oncompositionstart--->oncompositionend--->oninput */

? /* 限制輸入中文+空格/英文+空格/數(shù)字+空格/保留 binding.value 位小數(shù) */

? bind(el, binding) {

? ? const arg = binding.arg

? ? // 限制規(guī)則

? ? const restrictRule = {

? ? ? zh: /[^\s\u4E00-\u9FA5\s]/g, // 中文

? ? ? en: /[^a-zA-Z\s]/g, // 英文

? ? ? number: /[^0-9]/g, // 純數(shù)字

? ? ? float: (val) => {

? ? ? ? // 保留 v-limitInput:float="n" n位小數(shù)數(shù)字

? ? ? ? val =

? ? ? ? ? val.indexOf('.') > -1

? ? ? ? ? ? ? val.slice(0, val.indexOf('.') + binding.value + 1)

? ? ? ? ? ? : val

? ? ? ? return val.replace(/[^0-9\.]/g, '')

? ? ? }

? ? }

? ? const multiValitor = ['float'] // 多重限制類(lèi)型

? ? const restrict = restrictRule[binding.arg]

? ? let inputLock = false // 輸入鎖 使用輸入法時(shí)關(guān)閉限制 結(jié)束輸入法輸入時(shí)觸發(fā)限制

? ? const doRule = (e) => {

? ? ? // 判斷是否多重校驗(yàn)形式

? ? ? if (multiValitor.indexOf(arg) === -1) {

? ? ? ? e.target.value = e.target.value.replace(restrict, '')

? ? ? } else {

? ? ? ? e.target.value = restrictRule[arg](e.target.value)

? ? ? }

? ? ? // 手動(dòng)更新綁定值

? ? ? e.target.dispatchEvent(new Event('input'))

? ? }

? ? const target =

? ? ? el instanceof HTMLInputElement ? el : el.querySelector('input')

? ? target.addEventListener('input', (event) => {

? ? ? /*

? ? ? ? 若不是手動(dòng)輸入(inputType === 'insertText'),是更新時(shí)觸發(fā)此事件則不再執(zhí)行校驗(yàn)

? ? ? ? 防 dispatchEvent 無(wú)限觸發(fā)限制校驗(yàn)

? ? ? */

? ? ? if (!inputLock && event.inputType === 'insertText') {

? ? ? ? doRule(event)

? ? ? ? event.returnValue = false

? ? ? }

? ? ? event.returnValue = false

? ? })

? ? /* 使用輸入法開(kāi)始觸發(fā) */

? ? target.addEventListener('compositionstart', (event) => {

? ? ? inputLock = true

? ? })

? ? /* 結(jié)束輸入法使用觸發(fā) */

? ? target.addEventListener('compositionend', (event) => {

? ? ? inputLock = false

? ? ? doRule(event)

? ? })

? }

}

)


案例基于:https://juejin.cn/post/7081088003531079687?searchId=20240506174617A2F6C79CB31095069E68

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末微宝,一起剝皮案震驚了整個(gè)濱河市棺亭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蟋软,老刑警劉巖侦铜,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件专甩,死亡現(xiàn)場(chǎng)離奇詭異钟鸵,居然都是意外死亡钉稍,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)棺耍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)贡未,“玉大人,你說(shuō)我怎么就攤上這事蒙袍】÷保” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵害幅,是天一觀的道長(zhǎng)消恍。 經(jīng)常有香客問(wèn)我,道長(zhǎng)以现,這世上最難降的妖魔是什么狠怨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮邑遏,結(jié)果婚禮上佣赖,老公的妹妹穿的比我還像新娘。我一直安慰自己记盒,他們只是感情好憎蛤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布番捂。 她就那樣靜靜地躺著召庞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纲熏。 梳的紋絲不亂的頭發(fā)上碾盟,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天棚辽,我揣著相機(jī)與錄音,去河邊找鬼巷疼。 笑死晚胡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嚼沿。 我是一名探鬼主播估盘,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼骡尽!你這毒婦竟也來(lái)了遣妥?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤攀细,失蹤者是張志新(化名)和其女友劉穎箫踩,沒(méi)想到半個(gè)月后爱态,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡境钟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年锦担,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慨削。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡洞渔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缚态,到底是詐尸還是另有隱情磁椒,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布玫芦,位于F島的核電站浆熔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏桥帆。R本人自食惡果不足惜医增,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望环葵。 院中可真熱鬧调窍,春花似錦、人聲如沸张遭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)菊卷。三九已至缔恳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洁闰,已是汗流浹背歉甚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扑眉,地道東北人纸泄。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像腰素,于是被迫代替她去往敵國(guó)和親聘裁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容