2012-05-31 93 views
0

我正在使用jquery组合框,并依靠那里提供的源代码。我需要从远程源提供的数据,所以我用ajax把它连接起来。但是,由于AJAX是一个异步调用,我需要用搜索结果数据更新组合框。如何在jquery自动完成组合框中触发搜索?

如何触发组合框的搜索?

段:

代码
/* In 
$.widget("ui.combobox", { 
      _create: function() { 
// input definition 
*/ 
.autocomplete({ 
    delay: 0, 
    minLength: 0, 
    source: function(request, response) { 
     // implements retrieving and filtering data from the select 
     var term = request.term; 

     if(term.length >= 2){ 
      var abbreviation = term.substring(0,2); 
      if(!(abbreviation in cache)){ 
       searchResultData = searchCities(abbreviation); 
       updateOptions(select, searchResultData); 
       cache[abbreviation] = 1; 
      } 
     } 

     // updates the search widget with options matching request.term 
     var responseData = filterOptionsForResponse(select, term); 

     response(responseData); 
    }, 

休息是作为设置在jquery的站点。 当searchCities(abbreviation)返回本地对象数组时,上面的代码工作绝对正常。

  • searchCities(abbreviation):返回匹配缩写
  • updateOptions(select, data)城市的数组:更新选择组合框中的选项与给定的数据
  • filterOptionsForResponse(select, term):更新基于正则表达式
选择匹配项的combobx

我使用ajax搜索的当前版本:

function searchCities(abbreviation){ 
    if(!!abbreviation){ 
     $.ajax({ 
       url: "/wah/destinationsJson.action", 
       dataType: "json", 
       data: { 
        term: abbreviation 
       }, 
       type: "GET", 
       success: function(data){ 
        updateOptions($("#searchbox"), data.cities); 
        // $("#searchbox input").trigger('autocompleteselect', data.term); 
        // return data.cities; 
       } 
      }); 
    } 
} 

上面的触发器不会触发搜索!有人可以请解释我怎样才能触发此组合框搜索。 PS:我很抱歉没有提供jsfiddle/jsbin,因为我无法将它渲染到那里。

回答

0

我终于搞定了!感兴趣

http://jsfiddle.net/SRekL/

线:

输入 - >来源 - > AJAX - >成功

success: function(data) { 
    optionData = $.map(data.geonames,function(item){ 
     return new Object({name: item.adminName1}); ; 
    }); 

    updateOptions(select, optionData); 
    response(filterOptionsForResponse(select, term)); 
    return; 
} 

注:

  • 将optionData转换为一个对象数组,因为我的函数updateOptions(...)依赖于属性“name”。
  • updateOptions(select, optionData):更新此组合框与返回的数据
  • filterOptionsForResponse(select, term)的选项:过滤基于长期的选项,并突出了匹配的文本。

这个解决方案是为我的需求量身打造的,我需要用前两个字符打到服务器。我根据搜索到的术语筛选选项,并将结果集附加到给定的选项列表中。

为了演示,我在“jsFiddle”中使用了“http://ws.geonames.org/searchJSON”作为ajax调用的URL。

此外,在如此证明线程链对我的帮助很大:

Clue trail

相关问题