autocomplete触发事件_修改jQuery.autocomplete中遇到的键盘事件

修改jQuery.autocomplete中遇到的键盘事件

autocomplete是一个jquery的自动完成插件,http://www.pengoworks.com/workshop/jquery/autocomplete.htm

这个已经是作者在他人基础上修改了的,但还不完善。

我原来使用时,在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是不可少的

阅读(1562) | 评论(0) | 转发(0) |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值