修改jQuery.Autocomplete插件 支持中文輸入法 避免TAB、ENTER鍵失效、導(dǎo)致表單提交
更新時(shí)間:2009年10月11日 13:55:13 作者:
jQuery.Autocomplete 是jquery的流行插件,能夠很好的實(shí)現(xiàn)輸入框的自動(dòng)完成(autocomplete)、建議提示(input suggest)功能,支持ajax數(shù)據(jù)加載。
但唯一遺憾的是,在對(duì)中文輸入法打開(kāi)時(shí),firefox3.0中是對(duì)中文拼音的自動(dòng)匹配,而對(duì)輸入后的中文無(wú)法及時(shí)觸發(fā)匹配;而在我的IE6.0下,則無(wú)此問(wèn)題。
原因分析:
Autocomplete插件對(duì)用戶輸入字符的觸發(fā)自動(dòng)匹配是通過(guò)”keydown”事件進(jìn)行的(可分析jquery.autocomplete.js第 92行),在IE6中,當(dāng)輸入法打開(kāi)時(shí),輸入的字符是不會(huì)觸發(fā)”keydown”的,只有中文輸入完畢才觸發(fā)之,所以中文輸入和latin文沒(méi)有區(qū)別的;但在firefox3.0下,無(wú)論輸入法打開(kāi)否,按鍵都會(huì)觸發(fā)”keydown”事件,所以造成中文輸入完畢,自動(dòng)匹配的是剛才打出的部分中文拼音字母。 ------所以只有Firefox有問(wèn)題。
解決方法:
網(wǎng)上查到的最多做法是修改jquery.autocomplete.js第92行,將”keydown”替換為”keyup”,但這個(gè)不是根本辦法,雖然這樣改后可在firefox中及時(shí)對(duì)輸入的中文進(jìn)行自動(dòng)匹配,但將原插件中回車、tab等重要的事件機(jī)制破壞了,比如這樣改后,如果你的input是在一個(gè)form里的話,回車從原來(lái)的將選定項(xiàng)輸入到input中變?yōu)榱酥苯犹峤籪orm表單了,這并不是我們想要的。
我的方法原理是,補(bǔ)充一個(gè)原插件觸發(fā)查詢的事件,就是當(dāng)input輸入欄發(fā)生字符變化時(shí),重新進(jìn)行查詢(調(diào)用其內(nèi)部的onChange函數(shù)),這里主要針對(duì)firefox而言,因?yàn)槲覀兊南到y(tǒng)訪問(wèn)最多的是IE和firefox。而恰好firefox有一個(gè)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插件對(duì)用戶輸入字符的觸發(fā)自動(dòng)匹配是通過(guò)”keydown”事件進(jìn)行的(可分析jquery.autocomplete.js第 92行),在IE6中,當(dāng)輸入法打開(kāi)時(shí),輸入的字符是不會(huì)觸發(fā)”keydown”的,只有中文輸入完畢才觸發(fā)之,所以中文輸入和latin文沒(méi)有區(qū)別的;但在firefox3.0下,無(wú)論輸入法打開(kāi)否,按鍵都會(huì)觸發(fā)”keydown”事件,所以造成中文輸入完畢,自動(dòng)匹配的是剛才打出的部分中文拼音字母。 ------所以只有Firefox有問(wèn)題。
解決方法:
網(wǎng)上查到的最多做法是修改jquery.autocomplete.js第92行,將”keydown”替換為”keyup”,但這個(gè)不是根本辦法,雖然這樣改后可在firefox中及時(shí)對(duì)輸入的中文進(jìn)行自動(dòng)匹配,但將原插件中回車、tab等重要的事件機(jī)制破壞了,比如這樣改后,如果你的input是在一個(gè)form里的話,回車從原來(lái)的將選定項(xiàng)輸入到input中變?yōu)榱酥苯犹峤籪orm表單了,這并不是我們想要的。
我的方法原理是,補(bǔ)充一個(gè)原插件觸發(fā)查詢的事件,就是當(dāng)input輸入欄發(fā)生字符變化時(shí),重新進(jìn)行查詢(調(diào)用其內(nèi)部的onChange函數(shù)),這里主要針對(duì)firefox而言,因?yàn)槲覀兊南到y(tǒng)訪問(wèn)最多的是IE和firefox。而恰好firefox有一個(gè)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方法實(shí)現(xiàn)代碼
- jquery實(shí)現(xiàn)按Enter鍵觸發(fā)事件示例
- 基于jquery的button默認(rèn)enter事件(回車事件)。
- jquery 按鍵盤上的enter事件
- jQuery事件之鍵盤事件(ctrl+Enter回車鍵提交表單等)
- 基于Jquery的實(shí)現(xiàn)回車鍵Enter切換焦點(diǎn)
- Jquery利用mouseenter和mouseleave實(shí)現(xiàn)鼠標(biāo)經(jīng)過(guò)彈出層且可以點(diǎn)擊
- 基于Jquery的回車成tab焦點(diǎn)切換效果代碼(Enter To Tab )
- jQuery響應(yīng)enter鍵的實(shí)現(xiàn)思路
- jquery實(shí)現(xiàn)tab鍵進(jìn)行選擇后enter鍵觸發(fā)click行為
相關(guān)文章
jQuery md5加密插件jQuery.md5.js用法示例
這篇文章主要介紹了jQuery md5加密插件jQuery.md5.js用法,結(jié)合實(shí)例形式簡(jiǎn)單分析了jQuery md5加密插件jquery.md5.js的簡(jiǎn)單使用技巧,需要的朋友可以參考下2018-08-08
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
很多網(wǎng)站都是使用這種方式引入,客戶的瀏覽器可能已經(jīng)緩存過(guò)了 jquery??梢灾苯诱{(diào)用本地的,速度更快2011-04-04
使用jquery實(shí)現(xiàn)以post打開(kāi)新窗口
網(wǎng)絡(luò)上已有此功能的函數(shù),是以純JS實(shí)現(xiàn),本文為大家介紹的使用jquery實(shí)現(xiàn),需要的朋友可以參考下2014-03-03
jQuery簡(jiǎn)單實(shí)現(xiàn)驗(yàn)證郵箱格式
這篇文章主要介紹了jQuery簡(jiǎn)單實(shí)現(xiàn)驗(yàn)證郵箱格式的相關(guān)資料,需要的朋友可以參考下2015-07-07
jQuery實(shí)現(xiàn)基本淡入淡出效果的方法詳解
這篇文章主要介紹了jQuery實(shí)現(xiàn)基本淡入淡出效果的方法,結(jié)合實(shí)例形式詳細(xì)分析了jQuery使用fadeIn()、fadeOut()及fadeToggle()等方法控制頁(yè)面元素淡入淡出顯示效果的相關(guān)操作技巧,需要的朋友可以參考下2018-09-09
jQuery判斷郵箱格式對(duì)錯(cuò)實(shí)例代碼講解
本文通過(guò)實(shí)例代碼給大家講解了基于jquery判斷郵箱格式對(duì)錯(cuò),非常實(shí)用,具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-04-04
jQuery利用DOM遍歷實(shí)現(xiàn)商城結(jié)算系統(tǒng)實(shí)戰(zhàn)
這篇文章主要介紹了jQuery利用DOM遍歷實(shí)現(xiàn)商城結(jié)算系統(tǒng)實(shí)戰(zhàn),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06

