Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery-自动完成插件_Javascript_Jquery_Autocomplete - Fatal编程技术网

Javascript jQuery-自动完成插件

Javascript jQuery-自动完成插件,javascript,jquery,autocomplete,Javascript,Jquery,Autocomplete,我用的是这个: 唯一的问题是,当您在输入字段中键入第一个字符时,它将显示所有术语建议,包括不包含此字符的术语 只有在您键入第二个字符后,它才会正常工作,显示仅包含这两个字符的标记建议 我正在使用此配置: $('input.autocomplete').autocomplete("localhost/boo/?get_suggestions=1", { width: 250, max: 100, matchContains: true, minChars: 1, s

我用的是这个:

唯一的问题是,当您在输入字段中键入第一个字符时,它将显示所有术语建议,包括不包含此字符的术语

只有在您键入第二个字符后,它才会正常工作,显示仅包含这两个字符的标记建议

我正在使用此配置:

$('input.autocomplete').autocomplete("localhost/boo/?get_suggestions=1", {
   width: 250,
   max: 100,
   matchContains: true,
   minChars: 1,
   selectFirst: true,
   cache: false,
   multiple: true,
   multipleSeparator: " "
 });
有人知道这方面的解决方法吗

另外,当我键入一个随机字符串时,我知道它不在列表中,例如,
*&@fgbhfhbofub*UB 35;
,它将再次显示整个列表:(

后端:

if($_GET['get_suggestions']):
  $terms = get_all_terms();
  foreach ($terms as $term) echo $term['title']."\n";
  die();
endif;

我建议完全禁用第一个字符的建议,从第二个甚至第三个字符开始。包括我在内的大多数人都觉得在键入“b”后立即收到建议的垃圾邮件很烦人。

将你的minchars改为2

 minChars: 2
这将使它只建议从2字符的东西

或者尝试关闭多个

multiple: false
您需要启用它吗


如果这不是你喜欢的,请发布localhost/boo/?get\u suggestions=1的代码,我们将查看:)

自动完成代码在某些部分是错误的。从您发布的图像中,当您键入
a
时,会显示一个包含所有术语的长列表;键入
ac
时,建议列表匹配的是
a
,而不是
ac


这是什么意思?在考虑新字符之前,代码先考虑输入值。您可以深入研究插件代码,或者使用新插件。

我是维护github repo的人。下面是发生的事情:

在为数据使用url的情况下,脚本将按照您在指定url中设置的内容发送请求,并在末尾添加
q=[当前输入值]
。在初始加载的情况下,当您键入“a”时,这将发送到后端脚本:
localhost/boo/?get\u suggestions=1&q=a
。因此,autocompelte.js希望这个初始查询只生成与查询匹配的项。在该初始请求之后,脚本将在内部接受过滤子集,以减少服务器负载。这解释了为什么“ac”只返回符合条件的项。这是一个自动完成脚本,用于过滤服务器提供给它的内容

如果我正确地解释了后端代码,那么它不会使用请求中发送的
q
参数,因此您的代码会返回所有可能的术语。“自动完成”假定这是正确搜索的结果,并显示所有内容,等待键入更多字符,以便进一步过滤列表

要点是,在将术语列表返回到自动完成脚本之前,需要让后端脚本将术语列表过滤到与
q
参数匹配的任何术语


让我知道我是否能提供进一步的帮助

如果我这样做,那么同样的情况也会发生(在
minChars
字符之后)。所以如果我改为3,它只有在我输入至少4个字符时才会正常运行。。。但是谢谢你的建议,如果我能让它工作的话,我会这么做:)哦,但是谁说我说的是minChars GheGheGheGheGheGheGheGheGheGheGheGheGheGheGheGheGheGheGheGheGheG:)你可能会变得粗鲁,把建议藏起来,直到联系到你的个人minChars。但是首先你应该试着找出问题所在。编辑我注意到的一些内容,这不是localhost/boo/中的问题。阅读github页面上的AutoComplete插件,上面写着“Jörn Zaefferr(现已弃用)的jQuery插件”。可能很有趣。是的,github上的插件是一个不推荐使用的插件的端口(来自basistance.de的插件,现在集成在jquery UI中)。正如我前面所说,错误仍然存在,但这次是在第二个字符:)localhost/boo/?get_suggestions=1的代码看起来不错,它只是在每一行上回显一个术语列表…尝试发布“get_all_terms()”。你为什么要发代码?此外,当您键入内容时,打开开发人员工具(在chrome中检查元素,或在firefox中安装firebug ext)并查看xmlhttp请求(在chrome中,单击控制台图标并右键单击,选择log xmlhttp requests)。当您键入“a”时,查看它是否提交“a”,当您键入“ac”时,查看它是否提交“ac”。如下文所述,它只能在“ac”中提交“a”,而在“a”源中不提交任何内容:函数(请求,响应){var filteredArray=$.map(orignalArray,函数(项){if(item.value.startsWith(request.term)){return item;}否则{return null;});响应(filteredArray);},谢谢,我现在明白了:P但这是否会使脚本查询服务器有点太多?它应该只在每次输入最小字符数(在本例中为一个字符)时查询服务器。但请记住,一旦进行了第一次查询,该术语的其余字符将在JS级别进行过滤。事实上,您现在设置它的方式是:第一次加载时只进行一个查询(当您键入“a”时),其余的查询在本地完成(JS/browser,当您键入“c”时)。谢谢:)我可以问一下,是否可以更改建议框的布局以包括其他数据-如这里的示例2、3:是的,这是可能的。在此处查看原始脚本的选项:。在“选项”选项卡下,查找formatItem。您可以将函数加载到该参数中,脚本将为结果列表中的每个项目运行该参数。您可以编写一个函数来获取每个项目所需的附加数据,并根据需要进行布局。