jquery自動(dòng)完成
Posted on 2008-05-07 14:16 leekiang 閱讀(3575) 評(píng)論(0) 編輯 收藏 所屬分類: jquery(進(jìn)去而已)以下寫得很零碎,純粹是備忘
1,
? (1)如果用keydown,用中文輸入法時(shí)在輸入框里輸漢語(yǔ)拼音的字母就會(huì)有感知,故只能用keyup
? (2)后退問(wèn)題.
?????? 如何區(qū)分是在中文輸入法的輸入框里的后退,還是自動(dòng)完成錄入框里的后退,二者的處理是不一樣的。
? (3)確認(rèn)鍵
?????? 光標(biāo)在form里時(shí),按確認(rèn)鍵瀏覽器會(huì)自動(dòng)提交。而我想要的是一按確認(rèn)鍵,自動(dòng)錄入選中的那一項(xiàng)。
如何在按確認(rèn)鍵時(shí)不讓form截獲這個(gè)事件。要做成通用的,而不是在每一個(gè)form里寫死。
?? (4)調(diào)試時(shí)慎用alert
????? alert然后確定時(shí)會(huì)自動(dòng)執(zhí)行blur,會(huì)影響的原來(lái)程序的執(zhí)行次序
???????
2,插件
?(1)http://code.google.com/p/jqac/?不錯(cuò)
?(2)http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete 很好很強(qiáng)大
?(3)http://www.dyve.net/jquery/?autocomplete?有遮蓋select box功能
?(4)http://docs.jquery.com/Plugins/AutoComplete
?(5)http://mabp.kiev.ua/content/2008/04/08/autocomplete_by_your_own_hands
?(6)http://www.pengoworks.com/workshop/jquery/autocomplete.htm
?(7)http://huacn.blogbus.com/logs/19643985.html
測(cè)試鼠標(biāo)事件和鍵盤事件在IE和FF下的執(zhí)行次序,同時(shí)測(cè)試在中文輸入法下的執(zhí)行次序
(1)對(duì)key 來(lái)說(shuō) :keydown-->keypress-->keyup
如果持續(xù)按住鍵位,keydown會(huì)持續(xù)執(zhí)行;
如果要阻止按鍵的默認(rèn)行為,必須使用keypress(用return false),但按backspace時(shí)不行,因?yàn)閎ackspace時(shí)只執(zhí)行keydown和keyup,keyup之前回退的效果已經(jīng)生效了。
(2)對(duì)mouse來(lái)說(shuō) :mousedown-->mouseup-->click ,在IE下如果在與按下鼠標(biāo)的相同元素上松開(kāi)則產(chǎn)生click事件,如果松開(kāi)時(shí)已經(jīng)離開(kāi)最初按下時(shí)的元素了,則不會(huì)產(chǎn)生click事件;但據(jù)我觀察FF下不是這樣,FF下無(wú)論鼠標(biāo)是否在最初的元素上松開(kāi),都會(huì)產(chǎn)生click事件。
在中文輸入法模式下:
(1)FF


其中downup-up-是輸入法切換時(shí)的鍵盤事件
輸入第一個(gè)字母時(shí)產(chǎn)生down-press事件,然后輸入任何字母都不會(huì)產(chǎn)生鍵盤事件, 只有按確認(rèn)輸入的鍵了,例如按space或是1,才會(huì)執(zhí)行up事件,見(jiàn)右圖。
也就是說(shuō)錄入一次中文時(shí),不管中間過(guò)程怎么樣,整個(gè)的鍵盤事件只有3個(gè):down-press-up
(注:以上說(shuō)的鍵盤事件都是指發(fā)生在input上的)
2,IE


其中downup-up-也是輸入法切換時(shí)的鍵盤事件
然后在輸入法框里的所有按鍵都產(chǎn)生一對(duì)downup事件,包括回退和確認(rèn)都是。
無(wú)論光標(biāo)在input還是在輸入法框按回退,都是down-up
用style.imeMode好像無(wú)法得到當(dāng)前text的輸入法模式
(http://topic.csdn.net/t/20040908/13/3351801.html)
http://www.hihiyou.com/?p=5
http://realazy.org/blog/2007/10/31/solution-of-keyup-failing-when-ime-is-on/
http://topic.csdn.net/t/20040714/21/3175529.html
http://www.javaeye.com/topic/191555
另:IE中onpropertychange時(shí)要用event.propertyName?? ==?? "value"
? 判斷表單里的元素的值有沒(méi)有發(fā)生變化:? ???
還有
$("textarea").bind('propertychange',function(e) {
e.preventDefault();
// Your code here
});好像也不行
1,
? (1)如果用keydown,用中文輸入法時(shí)在輸入框里輸漢語(yǔ)拼音的字母就會(huì)有感知,故只能用keyup
? (2)后退問(wèn)題.
?????? 如何區(qū)分是在中文輸入法的輸入框里的后退,還是自動(dòng)完成錄入框里的后退,二者的處理是不一樣的。
? (3)確認(rèn)鍵
?????? 光標(biāo)在form里時(shí),按確認(rèn)鍵瀏覽器會(huì)自動(dòng)提交。而我想要的是一按確認(rèn)鍵,自動(dòng)錄入選中的那一項(xiàng)。
如何在按確認(rèn)鍵時(shí)不讓form截獲這個(gè)事件。要做成通用的,而不是在每一個(gè)form里寫死。
?? (4)調(diào)試時(shí)慎用alert
????? alert然后確定時(shí)會(huì)自動(dòng)執(zhí)行blur,會(huì)影響的原來(lái)程序的執(zhí)行次序
???????
2,插件
?(1)http://code.google.com/p/jqac/?不錯(cuò)
?(2)http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete 很好很強(qiáng)大
?(3)http://www.dyve.net/jquery/?autocomplete?有遮蓋select box功能
?(4)http://docs.jquery.com/Plugins/AutoComplete
?(5)http://mabp.kiev.ua/content/2008/04/08/autocomplete_by_your_own_hands
?(6)http://www.pengoworks.com/workshop/jquery/autocomplete.htm
?(7)http://huacn.blogbus.com/logs/19643985.html
測(cè)試鼠標(biāo)事件和鍵盤事件在IE和FF下的執(zhí)行次序,同時(shí)測(cè)試在中文輸入法下的執(zhí)行次序
<script>
function?$(id){return?document.getElementById(id);}
</script>
<input?onmousedown="$('d').value=$('d').value+'down'"?onmouseup="$('d').value=$('d').value+'up'"
?onclick="$('d').value=$('d').value+'click'"?><br>
<input?onkeydown="$('d').value=$('d').value+'down';"?onkeyup="$('d').value=$('d').value+'up-'"
? onkeypress="$('d').value=$('d').value+'press';"><br><br><br><br>
<input?id='d'?size=100>
你會(huì)發(fā)現(xiàn),在非中文輸入法模式下,IE和FF大體上按下面的順序function?$(id){return?document.getElementById(id);}
</script>
<input?onmousedown="$('d').value=$('d').value+'down'"?onmouseup="$('d').value=$('d').value+'up'"
?onclick="$('d').value=$('d').value+'click'"?><br>
<input?onkeydown="$('d').value=$('d').value+'down';"?onkeyup="$('d').value=$('d').value+'up-'"
? onkeypress="$('d').value=$('d').value+'press';"><br><br><br><br>
<input?id='d'?size=100>
(1)對(duì)key 來(lái)說(shuō) :keydown-->keypress-->keyup
如果持續(xù)按住鍵位,keydown會(huì)持續(xù)執(zhí)行;
如果要阻止按鍵的默認(rèn)行為,必須使用keypress(用return false),但按backspace時(shí)不行,因?yàn)閎ackspace時(shí)只執(zhí)行keydown和keyup,keyup之前回退的效果已經(jīng)生效了。
(2)對(duì)mouse來(lái)說(shuō) :mousedown-->mouseup-->click ,在IE下如果在與按下鼠標(biāo)的相同元素上松開(kāi)則產(chǎn)生click事件,如果松開(kāi)時(shí)已經(jīng)離開(kāi)最初按下時(shí)的元素了,則不會(huì)產(chǎn)生click事件;但據(jù)我觀察FF下不是這樣,FF下無(wú)論鼠標(biāo)是否在最初的元素上松開(kāi),都會(huì)產(chǎn)生click事件。
在中文輸入法模式下:
(1)FF


其中downup-up-是輸入法切換時(shí)的鍵盤事件
輸入第一個(gè)字母時(shí)產(chǎn)生down-press事件,然后輸入任何字母都不會(huì)產(chǎn)生鍵盤事件, 只有按確認(rèn)輸入的鍵了,例如按space或是1,才會(huì)執(zhí)行up事件,見(jiàn)右圖。
也就是說(shuō)錄入一次中文時(shí),不管中間過(guò)程怎么樣,整個(gè)的鍵盤事件只有3個(gè):down-press-up
(注:以上說(shuō)的鍵盤事件都是指發(fā)生在input上的)
2,IE


其中downup-up-也是輸入法切換時(shí)的鍵盤事件
然后在輸入法框里的所有按鍵都產(chǎn)生一對(duì)downup事件,包括回退和確認(rèn)都是。
無(wú)論光標(biāo)在input還是在輸入法框按回退,都是down-up
用style.imeMode好像無(wú)法得到當(dāng)前text的輸入法模式
(http://topic.csdn.net/t/20040908/13/3351801.html)
http://www.hihiyou.com/?p=5
http://realazy.org/blog/2007/10/31/solution-of-keyup-failing-when-ime-is-on/
http://topic.csdn.net/t/20040714/21/3175529.html
http://www.javaeye.com/topic/191555
另:IE中onpropertychange時(shí)要用event.propertyName?? ==?? "value"
document.getElementById('tt').attachEvent('onpropertychange',function(e){
????????for(var?item?in e){
????????????alert(item+":"+e[item]);//遍歷可看到propertyName
????????}
????});
????????for(var?item?in e){
????????????alert(item+":"+e[item]);//遍歷可看到propertyName
????????}
????});
? 判斷表單里的元素的值有沒(méi)有發(fā)生變化:? ???
<script>
????jQuery(document).ready(function(){
??????? var?inputarr?=document.getElementsByTagName("INPUT");//TEXTAREA,SELECT等都可以這樣用
????????for(var?i=0;i<inputarr.length;i++){
????????inputarr[i].attachEvent('onpropertychange',function(e){
???????if(e.propertyName!='value')return;??//不是value改變不執(zhí)行后面的操作
???????else{ischanged=true}
????});
????}
});
????</script>
奇怪的是先jQuery,再each,再用$(this).get(0).attachEvent("onpropertychange",fn); 好像不可以 ????jQuery(document).ready(function(){
??????? var?inputarr?=document.getElementsByTagName("INPUT");//TEXTAREA,SELECT等都可以這樣用
????????for(var?i=0;i<inputarr.length;i++){
????????inputarr[i].attachEvent('onpropertychange',function(e){
???????if(e.propertyName!='value')return;??//不是value改變不執(zhí)行后面的操作
???????else{ischanged=true}
????});
????}
});
????</script>
還有
$("textarea").bind('propertychange',function(e) {
e.preventDefault();
// Your code here
});好像也不行