我有这个自动完成输入:
<input type="text" id="find_user" class="autocomplete_field" />
脚本:
$("#find_user").autocomplete({
source: "/get_ajax_data.php?type=find_user",
minLength: 3,
timeout : 1000,
select: function( event, ui ) {
window.location.href = "/user_admin.php?action=edit&id=" + ui.item.id
}
});
当用户输入&#34; test&#34;我得到了以下结果:
[{"id":"26","uname":"test 1","firstname":"Test","lastname":"1","email":"1@mail.com", ............
选择下拉列表显示正常
我添加了一个显示所有内容的选项,输入&#34; *&#34;
$(".autocomplete_field").keyup(function(){
if ($(this).val() == '*') {
$(this).autocomplete('search', "___");
}
})
结果是:
[{"id":"1","uname":"admin","firstname":"Ad","lastname":"Min","email":"","lang_iso_code":null,.....................
但没有显示选择下拉列表。
它适用于我的本地机器,所以我认为这可能是超时问题。这就是为什么我添加了超时选项(不确定是否正确)。没有帮助。 我认为它可能是其他用户的数据“测试&#39;用户(只有两个其他用户)...所以我通过填写他们的名字(admin和cron)来单独搜索这两个用户,并且选择框显示返回的数据很好。
一旦我尝试在实时网站上查看所有内容,它就不会显示选择下拉列表。 虽然它只有5个用户(admin + cron +三个测试帐号) 需要大约440毫秒才能返回2.2kb的数据。
我正在使用JQ UI 1.11
编辑:
我刚用&#34; ___&#34;进行了测试因为搜索文本和所有用户都显示在下拉菜单中。我假设代码:
$(this).autocomplete('search', "___");
与搜索文本&#34; ___&#34;
时的功能相同 在conlsole中我可以看到ajax调用,term被设置为&#34; ___&#34;,结果如上所示。当我使用&#39; *&#39;时,就好像它不想显示菜单列表一样,并且仅在实时服务器上显示。当地工作正常。答案 0 :(得分:0)
经过一些更多的测试,以及搜索和响应事件中的一些控制台输出,我得出结论,我的代码必须导致自动完成字段与自身冲突。
此代码:
$(".autocomplete_field").keyup(function(){
if ($(this).val() == '*') {
$(this).autocomplete('search', "___");
console.log(".autocomplete_field search fired");
}
})
调用php页面,从而返回我在控制台中看到的数据。 但在发生事件追踪期间,我也看到原来的搜索功能也被称为:
$("#find_user").autocomplete({
....
search: function( event, ui ) {
console.log("#find_user search fired");
}
它按照上面的顺序解雇了。
因此,第二次搜索不符合最低标准,因此菜单没有显示或清除,以便我快速看到任何内容。
通过本地测试结果回来快速,我认为,在第二次搜索可能触发之前,第一次搜索已经启动,得到了结果,并显示了菜单。
我的解决方法是:
$(".autocomplete_field").keyup(function(){
if ($(this).val() == '*') {
//$(this).autocomplete('search', "___");
$(this).autocomplete("option", "minLength", 1);
} else {
$(this).autocomplete("option", "minLength", 3);
}
})
通过更改PHP脚本来转换&#34; *&#34; - &GT; &#34; &#34;然后很适合SQL查询...名称LIKE&#39;%%&#39;。我本可以做到这一点,以便转换不需要&#39; _&#39;作为列表所有触发器,但我喜欢&#34; *&#34;作为触发器。