2013-02-13 17 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