Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
如果查询与数据不同,请关闭jquery自动完成_Jquery_Jquery Ui_Jsonp_Jquery Ui Autocomplete - Fatal编程技术网

如果查询与数据不同,请关闭jquery自动完成

如果查询与数据不同,请关闭jquery自动完成,jquery,jquery-ui,jsonp,jquery-ui-autocomplete,Jquery,Jquery Ui,Jsonp,Jquery Ui Autocomplete,我有一个脚本,可以显示谷歌的建议。问题是,即使输入值与可用数据不同,它仍然显示列表,我宁愿将其关闭。看看这把小提琴: 键入一个字母,而不是像“cjfsdkcrdvhcxrbsks”这样的垃圾,您将看到列表仍在显示。那么,如果值与建议不匹配,如何关闭它 如果您在控制台中查看,实际上会出现一个错误 当搜索不返回结果时,对象data.query.results.toplevel为null。由于您没有进行检查,因此在尝试访问data.query.results.toplevel.CompleteSugg

我有一个脚本,可以显示谷歌的建议。问题是,即使输入值与可用数据不同,它仍然显示列表,我宁愿将其关闭。看看这把小提琴:


键入一个字母,而不是像“cjfsdkcrdvhcxrbsks”这样的垃圾,您将看到列表仍在显示。那么,如果值与建议不匹配,如何关闭它

如果您在控制台中查看,实际上会出现一个错误

当搜索不返回结果时,对象
data.query.results.toplevel
为null
。由于您没有进行检查,因此在尝试访问
data.query.results.toplevel.CompleteSuggestion
时会出现异常,并且菜单不会因为代码停止工作而关闭

检查
data.query.results.toplevel是否为null,如果为null,则使用
response([])关闭菜单:

success: function(data) {

    if (typeof data == 'string') {
        data = $.parseJSON(data);
    }

    if (data.query.results.toplevel === null) {
        // passing an empty array to response callback closes the menu
        response([]);
        return;
    }

    response(
        $.map(
        data.query.results.toplevel.CompleteSuggestion,
            function(item) {
                return {
                    label: item.suggestion.data,
                    value: item.suggestion.data
                };
        }));
}


刚刚用firebug检查了页面返回的内容,这应该可以工作,希望我更改了小提琴并更新了链接。
 success: function(data) {

          if (typeof data == 'string') data = $.parseJSON(data);
          if (data.query.results.toplevel == null){
                   $(this).autocomplete("close"); return;
          }