ajaxtags autocomplete 应用

  ajaxtags是java环境下的ajax框架,其实也谈不上一个框架,算是代码的集成方案吧。在最近的一个项目里在实现自动完成功能的输入框,使用了 ajaxtags 提供的autocomplete。

  总体感觉ajaxtags的autocomplete完成了我想要的大部分功能。但是用户希望框入如果不输入内容的话应该可以进行直接的选择,有点像是输入选择框。当鼠标双击输入框后,如果输入框中没有值,显示所有可选项。

  所以动手改起了autocomplete的源代码,现在讲讲思路:

  在使用autocomplete的网页中引入了ajaxtags.js和scriptaculous.js。发现ajaxtags.js依赖controls.js,也就是说ajaxtags.js的autocomplete实际上是在javascript里扩展了controls里的autocomplete。

  那就从根子上解决问题吧,打开controls.js,找到87行

  Event.observe(this.element, "keypress", this.onKeyPress.bindAsEventListener(this));

  复制以后,插入新行,将代码更改为:

  Event.observe(this.element, "dblclick", this.onDblclick.bindAsEventListener(this));

  这里我们是给输入框加入了一个新的监听器,让框入框监听双击事件。

  第126行,onKeyPress: function(event),复制整个方法,新方法为:

  onDblclick: function(event) {
    this.changed = true;
    this.hasFocus = true;
    if(this.observer) clearTimeout(this.observer);
    this.observer = setTimeout(this.onObserverEventEx.bind(this), this.options.frequency*1000);
  }

  这个方法就是去掉了键盘事件的判断,直接控制显示。

  注意,最后一行中将onObserverEvent更改为了onObserverEventEx,也就是说还要再定义一个方法:onObserverEventEx

方法如下:

  onObserverEventEx: function() {
     this.startIndicator();
     this.getUpdatedChoices();
  }

  在原来的onObserverEvent方法里要判断this.getToken().length>=this.options.minChars
  this.getToken().length是输入框输入字符的长度,this.options.minChars是创建autocomplete时传入的参数(从多少个字符开始进行搜索)。我们要实现的是双击输入框就能显示列表,也就是说还没有录入任何内容,所以不需要判断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值