2017-01-10 59 views
0

我正在使用select2 4.0.2來提供一個用於執行AJAX查找的選擇框。但是我想要做的就是在<option>標籤中顯示選項,比如正常的<select>,直到你開始輸入,然後通過AJAX進入服務器,當查詢字符串非空時進行更多搜索。在select2中使用靜態值,然後執行ajax搜索

基本上,問題是AJAX查詢有點慢,但我可以在頁面加載時預加載第一個結果。我不需要將它加載爲<option> s,我可以將它們填充到JSON數組或其他東西中。

+0

你不能輸入一個正常的選擇。使用''並在Event上添加'.select2()'。 – PHPglue

+0

我知道你不能輸入一個正常的選擇,我問如何讓select2像一個正常的選擇,直到你開始輸入。 –

回答

0

這就是我最終做的。在select2 ajax選項中,首先,在數據函數中,我隱藏了選項中的值和文本(因爲我無法在傳輸函數中訪問它)。很抱歉,這是在CoffeeScript中:

data: (params) -> 
    ret.q = params.term 
    ret.page = params.page 
    o = ({ 
    id: $(e).val(), 
    display_name: $(e).text() 
    } for e, index in this.children() when index > 0) 
    ret.options = o 
    return JSON.stringify(ret) 

然後我宣佈是否進行Ajax調用或使用本地數據決定傳輸功能:

transport: (params, success, failure) -> 
    # Get query string 
    params_data = $.parseJSON(params.data) 
    q = params_data.q 
    if !q || q.length < 3 
    q_reg = new RegExp(q, "i") 
    data = 
     incomplete_results: false 
     items: params_data.options.filter (element) -> 
     q_reg.test(element.display_name) 
    success(data) 
    else 
    $.ajax(params).done(success).fail(failure)