在某些情況下,比如自動(dòng)補(bǔ)全(auto complete)的輸入框中,需要使用keyup事件來(lái)監(jiān)聽(tīng)鍵盤(pán)的輸入以迅速作出回應(yīng)。
關(guān)鍵在于keyup, 如果世界是美好的,那么就不會(huì)有這篇blog. 可是……
世界是不美好的。我們活在中文世界,我們要用輸入法。在輸入法開(kāi)啟的情況下,您會(huì)碰到不美好的事情:keyup失效。對(duì)于您綁定到keyup的任何回調(diào)函數(shù),除非您把輸入法切換回英文狀態(tài),否則它會(huì)無(wú)動(dòng)于衷。如果能稱(chēng)之為bug,我會(huì)很高興,因?yàn)閎ug會(huì)有修復(fù)的可能,如果是特征(feature),那么,我只好嘆息一下。
問(wèn)題
在開(kāi)啟輸入法的情況下,三個(gè)瀏覽器的具體問(wèn)題如下:
- IE:觸發(fā)keydown和keyup, 不觸發(fā)keypress. 能夠獲得輸入值。
- Firefox:觸發(fā)keydown和keypress, 不觸發(fā)keyup. 輸入值未能獲得。在回車(chē)后會(huì)觸發(fā)keyup, 可獲得輸入值。
- Opera:keydown, keypress和keyup都不觸發(fā),輸入值也未能獲。
(如果您能幫我試用一下Safari,我會(huì)很高興并謝謝您。這里有一個(gè) 測(cè)試頁(yè)面 )
解決方案
總結(jié)出以上問(wèn)題,沒(méi)有興奮反而陷入絕望,因?yàn)闆](méi)有g(shù)oogle出解決方案(是的,對(duì)于拉丁語(yǔ)系的老外來(lái)說(shuō),不會(huì)存在輸入法)。但是,wait, 谷歌搜索的自動(dòng)補(bǔ)全不是工作得好好的嗎?于是研究一下這個(gè) http://www.google.cn/ac.js。嘿嘿,雖然混淆得還可以,但還是可以發(fā)現(xiàn)蛛絲馬腳的。它使用一個(gè)計(jì)時(shí)器,當(dāng)輸入框處于聚焦(focus)狀態(tài)時(shí),每10秒執(zhí)行一次回調(diào)函數(shù)。
雖然挺耗資源(所以建議在輸入框失焦(blur)時(shí),一定要清除這個(gè)計(jì)時(shí)器),但也只能如此了。作前端開(kāi)發(fā)的,不僅要與語(yǔ)言(JavaScript, CSS, HTML) 斗,還要與瀏覽器斗,其樂(lè)無(wú)窮也。
本文鏈接:http://www.95time.cn/tech/web/2007/5035.asp
出處:Realazy
責(zé)任編輯:moby
◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|