2013-02-13 48 views
0

示例JQuery自动完成代码。我可以通过两个独立的自动完成安装来调用一个函数,它允许我共享相同的功能,而不需要重写代码 。自动完成之间的JQuery共享功能

$("tags1").autocomplete(
{ 
       source: availableTags 
}); 

为了确保清楚。我不想重复代码。所以,当我在别处使用另一个自动完成时,我想引用自动完成中包含的代码,而不是重复代码(我只是重复自己)

+1

请问您自动完成数据不依靠什么键入到文本框?自动完成数据是从服务器发送的吗? – Dve 2013-02-13 10:57:51

+0

@DVE是的,但我有两个完全相同的,不想重复的代码。 – Jonathan 2013-02-13 11:00:53

回答

1

你可以做一个手动ajax获取请求来获取数据,那么这两个autocompletes只是该变量。

var cache = {}, 
    requestData = function(request, response) { 
     var term = request.term; 
     if(term in cache) { 
      response(cache[term]); 
      return; 
     } 

     $.getJSON("search.php", request, function(data, status, xhr) { 
      cache[term] = data; 
      response(data); 
     }); 
    }; 

$("#birds").autocomplete({ 
    minLength: 2, 
    source: requestData 
}); 

$("#moreBirds").autocomplete({ 
    minLength: 2, 
    source: requestData 
}); 

来源:http://jqueryui.com/resources/demos/autocomplete/remote-with-cache.html

但你真的应该从服务器告诉客户端缓存请求的结果发送缓存头。然后,当第二次自动完成请求时,浏览器不必再次打开服务器。

这是关于这个问题的一个伟大的文章:https://devcenter.heroku.com/articles/increasing-application-performance-with-http-cache-headers

+0

我的问题可能并不清楚。我想要做的是有一个函数可以通过两个独立的自动完成实例来调用,这使得我可以在不重写代码的情况下共享相同的功能。 – Jonathan 2013-02-13 14:50:19

+1

@Jonathan你可以重用源函数 - 答案更新。 – Dve 2013-02-13 14:58:22

+0

的确,我明白了。有没有办法来抽象所有的属性? – Jonathan 2013-02-13 15:04:39