Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2110803
  • 博文数量: 82
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 880
  • 用 户 组: 普通用户
  • 注册时间: 2005-03-14 00:01
文章分类

全部博文(82)

文章存档

2014年(1)

2011年(1)

2009年(8)

2008年(11)

2007年(13)

2006年(26)

2005年(22)

我的朋友

分类:

2009-04-11 17:00:05

修改jQuery.autocomplete中遇到的键盘事件
autocomplete是一个jquery的自动完成插件,
这个已经是作者在他人基础上修改了的,但还不完善。
我原来使用时,在onItemSelect调用中加了两个参数,v,$input
autocomplete.css中,将.ac_results li中的font:menu去掉了
使用中,发觉存在不足,主要是:
1.按回车不能和tab一样转移焦点
2.不能匹配部分文字,比如数组有"我爱中国",但输入"中国"不起作用.
3.匹配的条数如果多,需要拉动滚动条才能显示完,如果拉动后,看不到原输入框,这时选中不起作用,上屏的实际上是第一条.

第三个问题我采用了限制条数的方法,这样一般都会在一屏内.详细原因目前没有研究.
修改时,发觉时他的matchSubset设置代码就有错,是|| 1,这样,你如果给一个0,就还是1.在loadFromCache中,增加了matchContains判断,采用循环data每个数据indexOf的方法.不过,因为数据初始化时,就取了第一个字,所以,如果有开头匹配的就不会匹配中间,比如,有"中国人民",那么你输入"中国",就不会显示"我爱中国".这个目前可能没有必要修改.
键盘事件让人烦,现在改为传一个blur参数,指明blur时的函数,在input的html代码中不指定onblur事件了.去掉$input.keydown中的9(tab)和13(return)事件中的blur,用自己的blur代替.
这时英文已经能匹配了,但中文不行,原来输入法大有影响,而且每种输入法还有点不一样,不同的浏览器也不同.不过在ie和ff都可以用keyup事件,输入法用ctrl+space调出时是17,32,229之类.这下能闪出下拉框了,但是一按ctrl就消失,因为FF要取消输入法,发觉onChange函数中头一行没道理:
//ignore if the following keys are pressed: [del] [shift] [capslock]
if( lastKeyPressCode == 46 || (lastKeyPressCode > 8 && lastKeyPressCode < 32) ) return $results.hide();
于是注释掉,这下能正常匹配并选中中文了.
但是从上一个输入框tab进来后,发觉焦点立即又blur到下一个了,原来在第一个框tab时触发了keydown,在第二个才keyup,那么现在改一下,改为keyup中不判断tab了,在keydown中处理tab,直接跳到下一个框,当然,执行参数中的blur是不可少的
阅读(1755) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~