摘要:在源碼中尋找答案文檔中有如下一段話對(duì)于需要輸入法編輯器的語(yǔ)言中文日文韓文等,要注意的是,在字母組合窗口輸入時(shí)并不會(huì)更新。
前幾天一個(gè)項(xiàng)目中需要對(duì)一個(gè)輸入框輸入進(jìn)行限制,不能輸入數(shù)字,可以輸入漢字字母其他字符等。
心想這個(gè)不難,便隨手寫下了如下代碼:
const inputEle = document.querySelector("#input") const idReg = /[0-9]/g inputEle.addEventListener("input", function(e){ let value = e.target.value value = value.replace(idReg, "") inputEle.value = value })
但是等提到測(cè)試環(huán)境后,結(jié)果被測(cè)試同學(xué)發(fā)現(xiàn)在中文輸入法下回出現(xiàn)如下問(wèn)題:
IME問(wèn)題最終尋找一番后發(fā)現(xiàn),原來(lái)這是IME問(wèn)題,即中文輸入時(shí)出現(xiàn)在輸入框上方的帶候選但還未選擇的狀態(tài),其實(shí)這個(gè)在韓文日文等非字母文字中都會(huì)出現(xiàn)這個(gè)問(wèn)題。
那如何解決呢。
用搜索引擎一搜索,便看到了有人說(shuō)可以通過(guò)compositionstart和compositionend判斷是否處于IME狀態(tài)。但是這個(gè)兩個(gè)函數(shù)從來(lái)沒(méi)見(jiàn)過(guò),敢用嗎?兼容性如何?
于是便到caniuse和MDN上看看。
caniuse上根本就沒(méi)沒(méi)有這個(gè)函數(shù)的兼容性報(bào)告,MDN上雖然說(shuō)可以用,但是心里還是沒(méi)底。
這時(shí)想到vue文檔中好像提過(guò)關(guān)于中文輸入,于是馬上就翻了翻vue的文檔。
vue文檔中有如下一段話
對(duì)于需要輸入法編輯器的語(yǔ)言(中文、日文、韓文等),要注意的是,在 IME 字母組合窗口輸入時(shí) v-model 并不會(huì)更新。如果你想在此期間滿足更新需求,請(qǐng)使用 input 事件。
說(shuō)明vue解決了這個(gè)問(wèn)題,那vue是怎么實(shí)現(xiàn)的,是使用compositionstart和compositionend,還是其他方法?于是帶著疑問(wèn)道vue的源碼中尋找答案。
在關(guān)于v-model相關(guān)代碼中很快就看到了這行代碼
if (needCompositionGuard) { code = `if($event.target.composing)return;${code}` }
但是很明顯composing不是event.target的標(biāo)準(zhǔn)屬性,那是從哪里來(lái)的呢,于是全局搜索了composing,很快在這里找到了答案。
function onCompositionStart (e) { e.target.composing = true } function onCompositionEnd (e) { e.target.composing = false trigger(e.target, "input") }
而這兩個(gè)函數(shù)是在哪里被調(diào)用的呢?就在當(dāng)前文件內(nèi)一搜索就找到了。
el.addEventListener("compositionstart", onCompositionStart) el.addEventListener("compositionend", onCompositionEnd)
哈哈,原來(lái)就是前面所說(shuō)的compositionstart和compositionend方法。
結(jié)論既然vue中使用的就是compositionstart和compositionend方法,并且經(jīng)過(guò)這么多人檢驗(yàn),肯定是沒(méi)問(wèn)題的,可以在項(xiàng)目中放心的使用。
雖然一開(kāi)始就找到了正確的答案,但是后面的求證才是最有價(jià)值的。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/82766.html
摘要:需求對(duì)用戶的輸入進(jìn)行實(shí)時(shí)監(jiān)控,當(dāng)用戶輸入的內(nèi)容超出規(guī)定的字符長(zhǎng)度時(shí)對(duì)用戶輸入進(jìn)行截?cái)嗖⒔o予警告提示。實(shí)驗(yàn)發(fā)現(xiàn),這種處理方式對(duì)于英文字符或者數(shù)字輸入時(shí)效果完美,但是在輸入中文時(shí)有。用這個(gè)事件,我們可以實(shí)現(xiàn)中文輸入法截?cái)嗟膯?wèn)題了。 需求:對(duì)用戶的輸入進(jìn)行實(shí)時(shí)監(jiān)控,當(dāng)用戶輸入的內(nèi)容超出規(guī)定的字符長(zhǎng)度時(shí)對(duì)用戶輸入進(jìn)行截?cái)嗖⒔o予警告提示。 看到這一需求,第一想法就是對(duì)所需實(shí)時(shí)監(jiān)控的input輸入...
摘要:但是有時(shí)候我們需要實(shí)現(xiàn)文本框中輸入中文長(zhǎng)度是或是,其他非中文輸入是。因?yàn)橹形妮斎敕ǖ脑诜钦捷斎霑r(shí),對(duì)于我們這個(gè)算法,會(huì)出現(xiàn)剩余字符數(shù)為負(fù)值的情況。 textarea,input輸入字符數(shù)限制。 在做開(kāi)發(fā)時(shí),有一種需求是對(duì)輸入框(input,textarea)的字?jǐn)?shù)做限制。如果按照J(rèn)S的規(guī)定,字符串里所有的字符,長(zhǎng)度都是1。但是有時(shí)候我們需要實(shí)現(xiàn)文本框中輸入中文長(zhǎng)度是2(或是3),...
摘要:如果截?cái)嚅L(zhǎng)度為,位置編碼的,下圖是的在中給出了一種新的相對(duì)位置編碼,幾乎是和經(jīng)典的絕對(duì)位置編碼一一對(duì)應(yīng)。只是把絕對(duì)位置編碼替換成相對(duì)位置編碼,在兩個(gè)任務(wù)上都有的效果提升,最終效果也基本和一致。這一章我們主要關(guān)注transformer在序列標(biāo)注任務(wù)上的應(yīng)用,作為2017年后最熱的模型結(jié)構(gòu)之一,在序列標(biāo)注任務(wù)上原生transformer的表現(xiàn)并不盡如人意,效果比bilstm還要差不少,這背后有哪...
摘要:題外話補(bǔ)充一點(diǎn)是一種字符編碼方法,它是由國(guó)際組織設(shè)計(jì),可以容納全世界所有語(yǔ)言文字的編碼方案。帶有的字符串截取在這類編程語(yǔ)言中一個(gè)中文字符的長(zhǎng)度為,但是對(duì)大部分的并非全部取長(zhǎng)度則是。 我在虎嗅上看過(guò)一篇關(guān)于Emoji的趣聞, 特別有意思, 在這里跟大家分享一下。里面提到了Emoji是怎么誕生的。 1999年前后,日本一個(gè)名叫栗田穰崇的年輕人,和許多直男一樣, 給女友發(fā)的短信經(jīng)常會(huì)被誤解。...
閱讀 3724·2021-10-12 10:11
閱讀 1992·2019-08-30 15:53
閱讀 1599·2019-08-30 13:15
閱讀 2312·2019-08-30 11:25
閱讀 1809·2019-08-29 11:24
閱讀 1658·2019-08-26 13:53
閱讀 3533·2019-08-26 13:22
閱讀 1775·2019-08-26 10:24