我正在研究使用jQuery UI autocomplete小部件来实现用姓或名的用户查找 . 看起来默认情况下,自动完成按字符序列查找单词,无论它出现在单词中 . 因此,如果您有以下数据: javascript, asp, haskell
并输入 'as'
,您将获得全部三个 . 我希望它只匹配单词的开头 . 所以在上面的例子中你只得到 'asp'
. 有没有办法配置自动完成小部件来执行此操作?
最终,像Gmail一样,它会更好 .
注意:我正在尝试使用jQuery UI小部件专门找到一种方法 . 由于我已经在我的项目中使用jQuery UI,我计划坚持使用它并尝试不向我的Web应用程序添加额外的库 .
6 回答
在jQuery UI v1.8rc3中,the autocomplete widget接受source选项,该选项可以是字符串,数组或回调函数 . 如果它是一个字符串,自动完成功能会对该URL进行GET以获取选项/建议 . 如果数组,自动完成执行搜索,正如您所指出的那样,在数组术语中的任何位置都存在类型化的字符 . 最终的变体是你想要的 - 回调函数 .
从自动完成文档:
示例代码:
几个关键点:
对
$.ui.autocomplete.escapeRegex(req.term);
的调用会转义搜索词,以便用户输入的文本中的任何正则有意义的术语都被视为纯文本 . 例如,点( . )对正则表达式有意义 . 我通过阅读自动完成源代码了解了这个escapeRegex函数 .与
new Regexp()
的行 . 它指定以^(Circumflex)开头的正则表达式,这意味着,只有当类型字符出现在数组中术语的开头时才会匹配,这就是您想要的 . 它还使用"i"选项,这意味着不区分大小写的匹配 .$.grep()
实用程序只调用提供的数组中每个术语的提供函数 . 在这种情况下,函数只使用正则表达式来查看数组中的术语是否与键入的内容相匹配 .最后,使用搜索结果调用responseFn() .
工作演示:http://jsbin.com/ezifi
它看起来像什么:
请注意:我发现自动完成的文档在这一点上还不成熟 . 我找不到这样做的例子,我找不到工作文件,其中.css文件是必需的,或者使用哪些.css类 . 我从检查代码中学到了这一切 .
另见,how can I custom-format the Autocomplete plug-in results?
我使用devbridge的自动完成功能 . http://www.devbridge.com/projects/autocomplete/jquery/
它仅匹配起始字符 .
alt text http://i46.tinypic.com/2ihq7pd.jpg
至于基于名字或姓氏的匹配,您只需提供具有名字和姓氏的查找列表 .
用法示例:
您传递以初始化自动完成控件的
lookup
选项可以是列表或对象 . 以上显示了一个简单的列表 . 如果您希望将某些数据附加到返回的建议,那么将lookup
选项设为对象,如下所示:thx cheeso引导jsbin.com,
我扩展了你的代码以支持名字和姓氏匹配 .
演示:http://jsbin.com/ufimu3/
输入'an'或're'
如果你想搜索字符串中每个单词的开头,对于henchman来说更优雅的解决方案是使用cheeso,但只需使用regexp字边界特殊字符:
示例:http://jsbin.com/utojoh/2(尝试搜索'bl')
有another jQuery autocomplete plug-in可选择在每个项目的开头搜索(选项是matchContains=false,我认为这也是默认值) .
鉴于jQuery UI插件中没有这样的选项,我猜你要么必须使用不同的插件,或重写你现在使用的那个 .
您在哪里获取数据以填充自动完成?它来自数据库吗?如果是这样,您可以在查询中执行所需操作,并仅返回与每个单词的开头匹配的结果(名/姓)