input事件以及中文輸入法的處理


在項目的開發過程中,相信大家都處理過監聽用戶輸入的事情,一般我們會用到onkeyup、onkeydown、onkeypress、onchange、oninput事件,雖然都很熟悉了,但是還是有必要鞏固一下。

onkeyup  在當前元素上釋放鍵盤按鍵時觸發

onkeydown  當用戶按下鍵盤是會觸發

onkeypress  當用戶在鍵盤上按下某個鍵(不是所有的鍵都會觸發,比如ctrl)以后會觸發(safari上測試,回退等鍵不會觸發)

oninput  當input元素的value屬性發現變化時觸發,該事件是冒泡的,如果window對象支持該事件,input元素同樣也支持。

為了方便大家測試,寫了一個demo

在這里我還是想講下事件處理的流程以及事件響應和事件監聽,因為我經常搞混。

大家都知道事件處理有三個階段,捕獲階段、目標階段、冒泡階段

事件捕獲從上到下依次觸發元素事件監聽(如果支持該事件)-----直到目標元素結束(可見這種事件處理方式並不是我們想要的)

事件冒泡從目標元素開始觸發事件監聽,然后開始向上依次觸發元素事件監聽----直到最頂層結束(這是最合理的事件處理方式,大多數情況下都這樣處理)

定義:
1.事件流描述的是從頁面中接收事件的順序,也可理解為事件在頁面中傳播的順序。(事件處理順序)
2.事件就是用戶或瀏覽器自身執行的某種動作。諸如click(點擊)、load(加載)、mouseover(鼠標懸停)。(我所說的事件響應)
3.事件處理程序響應某個事件的函數就叫事件處理程序(或事件偵聽器)。(我所說的事件監聽)

關於事件事件處理階段寫了一個demo,相信大家一看就懂了。

好了,下面進入正題,關於input事件在中文輸入法時的表現。

~~搜索聯想功能,大家應該都不陌生吧,不熟悉的可以去看看百度的搜索就知道了,實現的原理很簡單。

監聽搜索框的input事件,獲取用戶輸入的內容傳給后台------獲取后台返回的結果並展示

如果是輸入的純英文很nice,沒什么問題,但是輸入中文呢。。

比如我想搜個“我的世界”,返回的第一個結果應該是“我”這個關鍵字返回的搜索結果對吧,但是並不是,返回“w”的搜索結果,原因想必大家都知道。

其實這個不是很大的問題,百度還不是這樣的,跟后台勾搭一下,就這樣樣子吧,沒啥影響,ok,搞定!

。。。。。

哈哈哈,上面只是開個玩笑,這個問題雖然不是那么重要,但是閑暇之余還是可以研究研究嘛。然后一陣google。

當當當。。。可以采用compositionstart和compositionend來捕獲IME(input method editor)的啟動和關閉事件。說實話,這兩事件聽都沒聽過,但是我們還是寫個demo來試試吧。

$("#keyup,#keydown,#keypress,#change,#input").on("click",function(){
                var oevent=this.id;
                $("#oinput").off().on({
                    oevent:function(e){
                        
                    },
                    compositionstart:function(){
                        $("#result").text("中文輸入:開始")
                    },
                    compositionend:function(){
                        $("#result").text("中文輸入:結束")
                    }
                })
                //alert(oevent)
            })

demo在此


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM