一、一頓整理 1.因為Canvas無法直接記錄文字選中,直接輸入,所以需要用到隱藏的input或者textarea文字框。 2.因為鍵盤的keydown,keyup,keypress瀏覽器相容問題很嚴重,所以改用compositionstart,compositionend,input監聽隱藏的input文字輸入框的按鍵事件,然後拿到此時文字框的值傳送出去;(並且避免了中文輸入法下的回車,空格,shift等無法監聽keycode值,一直是229) 3.下面測試
二、一般瀏覽器(解決中文狀態下,回車內容留在文字框內,不傳送出去,原因:沒有監聽到) 4.先描述在除了百度和搜狗之外的這些瀏覽器的事件,中文輸入法狀態下,觸發三個動作,一開始按鍵,就觸發了compositionstart,然後按空格,將中文輸入到隱藏的文字框內,或者按shift,Enter鍵,將中文輸入法上輸的中文轉成拼音字母,輸入上去,此時這三個動作都會觸發compositionend事件,而不觸發input事件,input事件在中文狀態下,每一次按字母,數字鍵觸發,而按回車,空格,shift不觸發。 5.每一次觸發compositionstart事件,都會讓變數isPinyin=true,表示進入中文輸入狀態; 6.所以,此時可以compositionend的動作監聽,拿到文字框的內容,傳送出去,並清空自身內容,然後才將變數isPinyin=false,表示之後進入非中文輸入狀態。(因為只有中文狀態下開始輸入文字,才會觸發compositionstart) 7.進入非中文輸入狀態下,不觸發compositionstart和compositionend事件,觸發input,做判斷,並且是非中文,isPinyin==false,然後直接每一次輸入,都傳送文字內容,然後自空;所以Input事件下的操作,可以設定為在isPinyin==false,下傳送,自空文字,中文狀態下,進入是compositionend,所以在compositionend事件內也不要做isPinyin的判斷? 三、百度和搜狗瀏覽器加微軟輸入法,QQ拼音輸入法(這兩個瀏覽器的重複問題) 8.在谷歌和搜狗瀏覽器下,在微軟預設輸入法和QQ拼音輸入法的中文狀態下,回車,空格,shift按鍵,都有觸發input和compositionend兩個事件,先是isPinyin==true觸發compositionend,再是改變成false,觸發input事件中,isPinyin==false條件內的傳送,清空操作,導致重複傳送,糾正:在compositionend事件下,新增對百度和搜狗瀏覽器的代理檢測條件,當非百度,搜狗瀏覽器的條件下,才執行傳送文字內容動作。(為什麼不在input事件內加判斷,而是選擇讓百度、搜狗瀏覽器使用微軟,QQ輸入法下,compositionend中的事件不觸發,因為在這兩個輸入法搭配下,百度,搜狗瀏覽器一般輸入事件(搜狗和百度輸入法下,回車/空格/shift觸發的是input,而沒有compositionend,與其他瀏覽器相反)而這兩個是輸入法下,先觸發compositionend,再觸發input,所以是禁掉composition下的事件觸發) 四、失焦 9.失焦時,設定定時器,自動聚焦在隱藏的文字框; 五、點選確定,或者回車後,依然有文字框 10.判斷文字輸入結束,輸入鍵盤銷燬時,將文字框自空,並且將文字框隱藏起來(不用失焦,可能邏輯會混亂) 11.總的事件,單獨的事件處理全部放在一個js檔案內,不然放在總的js檔案內,會導致耦合性太嚴重; 六、殘留文字的bug,只要成功傳送,不殘留就行了。Canvas元素實現文字的監聽輸入和主流瀏覽器的相容bug
相關文章
- 相容火狐瀏覽器的原生js設定元素的text文字值瀏覽器JS
- 相容所有瀏覽器的密碼框輸入提示效果瀏覽器密碼
- 監聽瀏覽器的後退事件瀏覽器事件
- CSS實現背景透明,文字不透明(相容各瀏覽器)CSS瀏覽器
- 實現高度“聽話”的多行文字輸入框
- 瀏覽器元素全屏api和在ie核心的部分相容瀏覽器API
- CSS實現的相容所有瀏覽器的背景漸變程式碼CSS瀏覽器
- 前端檔案下載相容方案(相容主流瀏覽器,包括IE與Safari)前端瀏覽器
- javascript實現的對相容各個瀏覽器事件封裝JavaScript瀏覽器事件封裝
- 主流瀏覽器相容性問題與解決方案瀏覽器
- 相容所有瀏覽器的點選複製文字內容效果瀏覽器
- javascript實現的相容各個瀏覽器的註冊和刪除事件程式碼JavaScript瀏覽器事件
- oninput和onpropertychange實時監聽輸入框值的變化
- js實現的相容所有瀏覽器的滑鼠中鍵滾動事件JS瀏覽器事件
- IE瀏覽器相容瀏覽器
- parseInt()瀏覽器相容瀏覽器
- 9:瀏覽器相容瀏覽器
- 主流瀏覽器及其核心瀏覽器
- 模擬實現相容低版本IE瀏覽器的原生bind()瀏覽器
- js實現的通用相容低版本IE瀏覽器的事件註冊和刪除JS瀏覽器事件
- css文字兩端對齊效果相容各瀏覽器CSS瀏覽器
- 相容所有瀏覽器的禁止選中div文字程式碼例項瀏覽器
- js上傳圖片預覽,相容IE6以上各大主流瀏覽器JS瀏覽器
- scrollHeight和scrollWidth瀏覽器相容瀏覽器
- 瀏覽器相容問題和webapp瀏覽器WebAPP
- Javascript和CSS瀏覽器相容總結JavaScriptCSS瀏覽器
- 關於瀏覽器裡事件的捕獲和冒泡及監聽器執行的順序瀏覽器事件
- 相容所有瀏覽器js設定元素透明度效果瀏覽器JS
- js相容所有主流瀏覽器建立XMLhttpRequest物件例項程式碼JS瀏覽器XMLHTTP物件
- [BUG反饋]IE瀏覽器,百度瀏覽器,搜狗瀏覽器批量操作功能都不相容!!!!傲遊、火狐、谷歌瀏覽器可以瀏覽器谷歌
- 導航的瀏覽器相容問題瀏覽器
- 相容所有瀏覽器的placeholder效果瀏覽器
- 相容所有瀏覽器的getElementsByClassName()函式瀏覽器函式
- 相容各主瀏覽器透明的CSS瀏覽器CSS
- 關於瀏覽器相容瀏覽器
- 瀏覽器相容性瀏覽器
- 實時監聽input輸入框value的變化:
- Brow.sh:現代的基於文字的瀏覽器瀏覽器