修改jQuery.Autocomplete插件 支持中文輸入法 避免TAB、ENTER鍵失效、導(dǎo)致表單提交
更新時間:2009年10月11日 13:55:13 作者:
jQuery.Autocomplete 是jquery的流行插件,能夠很好的實現(xiàn)輸入框的自動完成(autocomplete)、建議提示(input suggest)功能,支持ajax數(shù)據(jù)加載。
但唯一遺憾的是,在對中文輸入法打開時,firefox3.0中是對中文拼音的自動匹配,而對輸入后的中文無法及時觸發(fā)匹配;而在我的IE6.0下,則無此問題。
原因分析:
Autocomplete插件對用戶輸入字符的觸發(fā)自動匹配是通過”keydown”事件進行的(可分析jquery.autocomplete.js第 92行),在IE6中,當(dāng)輸入法打開時,輸入的字符是不會觸發(fā)”keydown”的,只有中文輸入完畢才觸發(fā)之,所以中文輸入和latin文沒有區(qū)別的;但在firefox3.0下,無論輸入法打開否,按鍵都會觸發(fā)”keydown”事件,所以造成中文輸入完畢,自動匹配的是剛才打出的部分中文拼音字母。 ------所以只有Firefox有問題。
解決方法:
網(wǎng)上查到的最多做法是修改jquery.autocomplete.js第92行,將”keydown”替換為”keyup”,但這個不是根本辦法,雖然這樣改后可在firefox中及時對輸入的中文進行自動匹配,但將原插件中回車、tab等重要的事件機制破壞了,比如這樣改后,如果你的input是在一個form里的話,回車從原來的將選定項輸入到input中變?yōu)榱酥苯犹峤籪orm表單了,這并不是我們想要的。
我的方法原理是,補充一個原插件觸發(fā)查詢的事件,就是當(dāng)input輸入欄發(fā)生字符變化時,重新進行查詢(調(diào)用其內(nèi)部的onChange函數(shù)),這里主要針對firefox而言,因為我們的系統(tǒng)訪問最多的是IE和firefox。而恰好firefox有一個input變化的事件就是oninput,那么我們只要在原jquery.autocomplete.js第199行,插入如下代碼:
.bind("input", function() {
// @hack:support for inputing chinese characters in firefox
onChange(0, true);
});
插入后,代碼大概如下:
...
...
jQueryinput.unbind();
jQuery(input.form).unbind(".autocomplete");
}).bind("input", function() {
// @hack:support for inputing chinese characters in firefox
onChange(0, true);
});
...
原因分析:
Autocomplete插件對用戶輸入字符的觸發(fā)自動匹配是通過”keydown”事件進行的(可分析jquery.autocomplete.js第 92行),在IE6中,當(dāng)輸入法打開時,輸入的字符是不會觸發(fā)”keydown”的,只有中文輸入完畢才觸發(fā)之,所以中文輸入和latin文沒有區(qū)別的;但在firefox3.0下,無論輸入法打開否,按鍵都會觸發(fā)”keydown”事件,所以造成中文輸入完畢,自動匹配的是剛才打出的部分中文拼音字母。 ------所以只有Firefox有問題。
解決方法:
網(wǎng)上查到的最多做法是修改jquery.autocomplete.js第92行,將”keydown”替換為”keyup”,但這個不是根本辦法,雖然這樣改后可在firefox中及時對輸入的中文進行自動匹配,但將原插件中回車、tab等重要的事件機制破壞了,比如這樣改后,如果你的input是在一個form里的話,回車從原來的將選定項輸入到input中變?yōu)榱酥苯犹峤籪orm表單了,這并不是我們想要的。
我的方法原理是,補充一個原插件觸發(fā)查詢的事件,就是當(dāng)input輸入欄發(fā)生字符變化時,重新進行查詢(調(diào)用其內(nèi)部的onChange函數(shù)),這里主要針對firefox而言,因為我們的系統(tǒng)訪問最多的是IE和firefox。而恰好firefox有一個input變化的事件就是oninput,那么我們只要在原jquery.autocomplete.js第199行,插入如下代碼:
復(fù)制代碼 代碼如下:
.bind("input", function() {
// @hack:support for inputing chinese characters in firefox
onChange(0, true);
});
插入后,代碼大概如下:
復(fù)制代碼 代碼如下:
...
...
jQueryinput.unbind();
jQuery(input.form).unbind(".autocomplete");
}).bind("input", function() {
// @hack:support for inputing chinese characters in firefox
onChange(0, true);
});
...
您可能感興趣的文章:
- 按Enter鍵觸發(fā)事件的jquery方法實現(xiàn)代碼
- jquery實現(xiàn)按Enter鍵觸發(fā)事件示例
- 基于jquery的button默認(rèn)enter事件(回車事件)。
- jquery 按鍵盤上的enter事件
- jQuery事件之鍵盤事件(ctrl+Enter回車鍵提交表單等)
- 基于Jquery的實現(xiàn)回車鍵Enter切換焦點
- Jquery利用mouseenter和mouseleave實現(xiàn)鼠標(biāo)經(jīng)過彈出層且可以點擊
- 基于Jquery的回車成tab焦點切換效果代碼(Enter To Tab )
- jQuery響應(yīng)enter鍵的實現(xiàn)思路
- jquery實現(xiàn)tab鍵進行選擇后enter鍵觸發(fā)click行為
相關(guān)文章
利用jquery和BootStrap實現(xiàn)動態(tài)滾動條效果
這篇文章主要介紹了利用jquery和BootStrap實現(xiàn)動態(tài)滾動條效果,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-12-12兼容主流瀏覽器的jQuery+CSS 實現(xiàn)遮罩層的簡單代碼
比起使用注冊頁和登陸頁,網(wǎng)站在當(dāng)前頁使用遮罩層注冊和登陸的用戶體驗要好不少。這里使用jQuery和CSS實現(xiàn)一個簡單的遮罩效果。2014-10-10jQuery實現(xiàn)動態(tài)表單驗證時文本框抖動效果完整實例
這篇文章主要介紹了jQuery實現(xiàn)動態(tài)表單驗證時文本框抖動效果,可實現(xiàn)表單元素左右晃動的抖動功能,涉及jquery中元素的匹配與動畫animate效果實現(xiàn)技巧,需要的朋友可以參考下2015-08-08使用jquery給input和textarea設(shè)定ie中的focus
在瀏覽網(wǎng)站的過程中,我們經(jīng)??梢钥匆姰?dāng)鼠標(biāo)點擊后樣式改變的文本框和文本域,那么這種效果是如何實現(xiàn)的呢?2008-05-05jQuery獲取文本節(jié)點之 text()/val()/html() 方法區(qū)別
在jquery中val,text,html都能取到值,或加一個參數(shù)來賦值,那么它們有些什么區(qū)別?2011-03-03基于Jquery的$.cookie()實現(xiàn)跨越頁面tabs導(dǎo)航實現(xiàn)代碼
基于Jquery的$.cookie()實現(xiàn)跨越頁面tabs導(dǎo)航實現(xiàn)代碼,需要的朋友可以參考下。2011-03-03