2012-03-10 63 views
1

我有一个脚本,它允许显示谷歌的建议。问题是,即使输入值与可用数据不同,它仍然显示列表,我宁愿将其关闭。看看这个小提琴:JsFiddle关闭jQuery的自动完成,如果查询不像数据

键入一个字母比'cjfsdkcrdvhcxrbsks'一些垃圾你会看到列表仍然显示。那么如果价值与建议不符,我该如何关闭它?

+0

我改变了小提琴更新的链接。 – Youss 2012-03-10 11:59:24

回答

2

如果您在控制台中查看,则实际发生错误。

当搜索没有返回结果时,对象data.query.results.toplevel为空。由于您没有检查,因此尝试访问data.query.results.toplevel.CompleteSuggestion时出现异常,菜单不能简单地关闭,因为代码刚停止工作。

检查null为data.query.results.toplevel,并在情况下,它为空,则使用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 
       }; 
     })); 
} 

DEMO

1
success: function(data) { 

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

刚刚查了一下使用Firebug的页面的回报,这应该工作,希望