中文輸入法不觸發(fā)onkeyup事件的解決辦法
這兩天做一個需要實時監(jiān)控文本框輸入的功能,碰到了中文輸入法無法觸發(fā)onkeyup事件的惡心問題。
具體表現(xiàn)是這樣的:
當監(jiān)聽一個input的keyup的事件的時候,英文輸入法的情況下可以實時的通過keyup事件檢測到文本框value的變化,但是當輸入法變成中文后,input的keyup事件就不會被正常觸發(fā)。這是最先前的寫法。
<html> <head> <script type="text/javascript" src="http://www.dbjr.com.cn/static/js/jquery-1.4.2.min.js"></script> </head> <body> <p> 使用keyup事件檢測文本框內(nèi)容: </p> <p> <input type="text" name="keyup_i" id="keyup_i" autocomplete="off"/> <span id="keyup_s"></span> <script type="text/javascript"> $('#keyup_i').bind('keyup', function(){ $('#keyup_s').text($(this).val()); }) </script> </p> </body> </html>
如你所見,這樣的寫法遇到了中文不能觸發(fā)keyup事件的問題。于是尋求解決方法,想起來baidu的搜索欄提示似乎是沒有這個問題的,于是開始看百度的js。百度的js比較難看...方法命名凈是一個字母,最后發(fā)現(xiàn)大概是使用了timeout做一個定時器來定時監(jiān)測input框的修改。不是很滿意這樣的方法。于是繼續(xù)查找看有沒有更好的解決辦法,于是就找到了oninput和onpropertychange兩個事件。
oninput是firefox下面可用,而onpropertychange則是ie下可用。兩個方法有著一些區(qū)別。
oninput只能檢測到value這個屬性的變化,而onpropertychange則可以檢測到包含value的所有屬性的變化。于是開始改成這個樣子。
<html> <head> <script type="text/javascript" src="http://www.dbjr.com.cn/static/js/jquery-1.4.2.min.js"></script> </head> <body> <p> 使用oninput以及onpropertychange事件檢測文本框內(nèi)容: </p> <p> <input type="text" name="inputorp_i" id="inputorp_i" autocomplete="off"/> <span id="inputorp_s"></span> <script type="text/javascript"> //先判斷瀏覽器是不是萬惡的IE,沒辦法,寫的東西也有IE使用者 var bind_name = 'input'; if (navigator.userAgent.indexOf("MSIE") != -1){ bind_name = 'propertychange'; } $('#inputorp_i').bind(bind_name, function(){ $('#inputorp_s').text($(this).val()); }) </script> </p> </body> </html>
問題這么被解決了。
相關(guān)文章
詳解JavaScript中g(shù)etFullYear()方法的使用
這篇文章主要介紹了詳解JavaScript中g(shù)etFullYear()方法的使用,是JS入門學習中的基礎(chǔ)知識,需要的朋友可以參考下2015-06-06Javascript學習筆記之函數(shù)篇(四):arguments 對象
JavaScript中arguments函數(shù)對象是該對象代表正在執(zhí)行的函數(shù)和調(diào)用它的函數(shù)的參數(shù)。JavaScript 函數(shù)中 arguments 為特殊對象,無需明確指出參數(shù)名,就能訪問它們。2014-11-11JS中for循序中延遲加載動態(tài)效果的具體實現(xiàn)
今天在做一個前端的效果的時候碰到一個棘手的問題,就是實現(xiàn)一個動態(tài)的圓柱效果,廢話不多少,直接上代碼2013-08-08