MDA/MDD/TDD/DDD/DDDDDDD
posts - 536, comments - 111, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

jquery自动完成

Posted on 2008-05-07 14:16 leekiang 阅读(3544) 评论(0)  编辑  收藏 所属分类: jquery(进去而已)
以下写得很零碎,纯粹是备忘
1,
  (1)如果用keydown,用中文输入法时在输入框里输汉语拼音的字母就会有感知,故只能用keyup
  (2)后退问题.
       如何区分是在中文输入法的输入框里的后退,还是自动完成录入框里的后退,二者的处理是不一样的。
  (3)确认键
       光标在form里时,按确认键浏览器会自动提交。而我想要的是一按确认键,自动录入选中的那一项。
如何在按确认键时不让form截获这个事件。要做成通用的,而不是在每一个form里写死。
   (4)调试时慎用alert
      alert然后确定时会自动执行blur,会影响的原来程序的执行次序
       

2,插件
 (1)http://code.google.com/p/jqac/ 不错
 (2)http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete 很好很强大
 (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

测试鼠标事件和键盘事件在IE和FF下的执行次序,同时测试在中文输入法下的执行次序
<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>
你会发现,在非中文输入法模式下,IE和FF大体上按下面的顺序
(1)对key 来说 :keydown-->keypress-->keyup
如果持续按住键位,keydown会持续执行;
如果要阻止按键的默认行为,必须使用keypress(用return false),但按backspace时不行,因为backspace时只执行keydown和keyup,keyup之前回退的效果已经生效了。
(2)对mouse来说 :mousedown-->mouseup-->click ,在IE下如果在与按下鼠标的相同元素上松开则产生click事件,如果松开时已经离开最初按下时的元素了,则不会产生click事件;但据我观察FF下不是这样,FF下无论鼠标是否在最初的元素上松开,都会产生click事件。

在中文输入法模式下:
(1)FF
ff1.jpgff2.jpg
其中downup-up-是输入法切换时的键盘事件
输入第一个字母时产生down-press事件,然后输入任何字母都不会产生键盘事件, 只有按确认输入的键了,例如按space或是1,才会执行up事件,见右图。
也就是说录入一次中文时,不管中间过程怎么样,整个的键盘事件只有3个:down-press-up
(注:以上说的键盘事件都是指发生在input上的)
2,IE
IE1.jpgIE2.jpg
其中downup-up-也是输入法切换时的键盘事件
然后在输入法框里的所有按键都产生一对downup事件,包括回退和确认都是。
无论光标在input还是在输入法框按回退,都是down-up

用style.imeMode好像无法得到当前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时要用event.propertyName   ==   "value"
document.getElementById('tt').attachEvent('onpropertychange',function(e){
        
for(var item in e){
            alert(item
+":"+e[item]);//遍历可看到propertyName
        }
    });

  判断表单里的元素的值有没有发生变化:     
<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改变不执行后面的操作
       else{ischanged=true}
    });
    }
});
    
</script>
奇怪的是先jQuery,再each,再用$(this).get(0).attachEvent("onpropertychange",fn); 好像不可以
还有
$("textarea").bind('propertychange',function(e) {
e.preventDefault();
// Your code here
});好像也不行


只有注册用户登录后才能发表评论。


网站导航: