2011-08-12 38 views
1

我试图实现类似于Google即时搜索的功能,该功能可以在您输入文本框时显示可能的搜索内容。包含搜索关键字的jQuery自动完成显示结果

到目前为止,我得到的结果作为JSON字符串和jQuery的自动完成显示他们完美。现在我想显示所有包含搜索关键字的结果。

像比方说,如果搜索关键字是“富巴”和我的成绩“富乐趣吧”;现在,结果中包含“foo”和“bar”键,但当前的自动完成插件不显示它。

是否有修改插件来实现这一目标的方法吗?

回答

1

你需要修改自动完成构件的过滤器功能的默认行为分裂的文本框中的值成单独的标记和搜索上的每个令牌源对象。你可以download the jQuery UI source here。查看jquery.ui.autocomplete.js第422行,获取您需要修改的过滤器函数。您会注意到它会返回正则表达式的测试,以查看值对象的标签成员,值成员或值对象本身是否与正则表达式匹配。您必须将这些测试结果聚合到数组中的每个字符串上,这些字符串通过调用.split()返回,该字符串元素从三个来源中的一个派生而来。

如果您想来缩小您的修改自动完成代码,使用Google's Closure Compiler Service

+0

感谢您的回复。我正在寻找。干杯! – Sunyl

+1

我修改了jquery.ui.autocomplete.js第422行(如[lthibodeaux] [1]建议的),它的工作方式就像魅力!谢谢..对于那些正在寻找类似的东西来实现,这里是修改后的代码段在jquery.ui.autocomplete.js 过滤线422:功能(数组,术语){ \t \t变种匹配器; \t \t var keys = term.split(''); \t \t $ \t。每(键,功能(索引,值){\t \t \t 匹配\t =新正则表达式($ .ui.autocomplete.escapeRegex(值)中, “i”); \t \t}); \t \t \t \t return $。grep(array,function(value){ \t \t \t return matcher.test(value.label || value.value || value); \t});} – Sunyl

0

你如何查询你的数据?在服务器网站你应该得到所有记录包含您的搜索,而不是Startwith。

+0

我得到包含来自服务器的搜索关键字的结果,但后来我做那些格式化成字符串像结果说,例如,如果我找“西雅图98104”我知道“西雅图WA 98104”,但自动完成呢由于“WA”标记,搜索字符串不匹配,因此不显示它。 – Sunyl

0

取决于您如何获取数据。按空格拆分关键字并列出所有同时具有Foo和Bar的数据。

+0

雅我在想同样的方法,但我想知道当前的自动完成插件是否允许这样做,否则我将不得不修改代码。 – Sunyl

+0

啊。我匆匆读过它,并认为你写了自动完成。您可能需要做其他人提到的内容并编辑jquery的源码 – Danny

相关问题