2013-04-10 103 views
10

我正在使用select2來搜索我的搜索框。我從我的網址獲取結果,但我無法從中選擇一個選項。我想使用'product.productName'作爲選擇後顯示的文本。有什麼我錯過了或者我犯過的錯誤。我已經包括select2.css和select2.min.js,jquery.js和無法從select2搜索結果中選擇結果

function dataFormatResult(product) { 
     var markup = "<table class='product-result'><tr>"; 

     markup += "<td class='product-info'><div class='product-title'>" +  product.productName + "</div>"; 
     if (product.manufacturer !== undefined) { 
      markup += "<div class='product-synopsis'>" + product.manufacturer + "</div>"; 
     } 
     else if (product.productOptions !== undefined) { 
      markup += "<div class='product-synopsis'>" + product.productOptions + "</div>"; 
     } 
     markup += "</td></tr></table>"; 
     return markup; 
    } 

    function dataFormatSelection(product) { 
     return product.productName; 
    } 
    $(document).ready(function() { 
     $("#e7").select2({ 
      placeholder: "Search for a product", 
      minimumInputLength: 2, 
      ajax: { 
       url: myURL, 
       dataType: 'json', 
       data: function(term,page) { 
        return { 
         productname: term 
        }; 
       }, 
       results: function(data,page) { 

        return {results: data.result_object}; 
       } 
      }, 
      formatResult: dataFormatResult, 
      formatSelection: dataFormatSelection, 
      dropdownCssClass: "bigdrop", 
      escapeMarkup: function(m) { 
       return m; 
      } 
     }); 
    }); 

這是我resut_object

"result_object":[{"productName":"samsung galaxy s3","manufacturer":"Samsung","productOptions":"Color;Memory","productOptiondesc":"Silver;32GB"},{"productName":"samsung salaxy s3","manufacturer":"Samsung","productOptions":"Color;Memory","productOptiondesc":"Graphite;32GB"},{"productName":"samsung galaxy s3","manufacturer":"Samsung","productOptions":"Color;Memory","productOptiondesc":"Silver;16GB"}] 

回答

34

你缺少對結果數據id屬性。如果沒有,則使選項「不可選」。

例子:

  $('#e7').select2({ 
        id: function(e) { return e.productName; }, 
      }); 
+0

救了我的時間!......他們有可怕的文件。他們的AJAX的例子!應該提到這個... – 2017-06-10 05:38:50

+0

特爾文,鏈接是壞的..順便說一句,添加ID並沒有對我有所幫助。 – 2017-06-25 17:23:43

+0

@AlexanderSuraphel這個答案發生在四年前,它應該解決OP問題,萬一鏈接將被破壞,所以我把示例代碼指出來,所以引用不是問題。該插件也得到更新,許多事情已經改變。現在我不知道你的問題是什麼。抱歉。 – 2017-06-26 02:42:49

0

我也面臨着同樣的問題,對於這個問題的其他解決方案是: -

在您的響應對象(在上面的響應產品詳細介紹對象)必須有一個「id」作爲它的關鍵和價值。

實施例: - 您上面給出響應的對象必須是這樣

{ 「ID」: 「1」, 「產品名稱」: 「三星Galaxy S3」, 「製造商」: 「三星」, 「productOptions」 : 「顏色;記憶」, 「productOptiondesc」: 「銀; 32GB」}

,所以你不需要這個 ID:函數(對象){返回object.key;}

0

的ID PARAM可以是與對象屬性名稱相關的字符串,並且必須位於對象的根目錄中。數據對象內的文本。

var fruits = [{code: 222, fruit: 'grape', color:'purple', price: 2.2}, 
    {code: 234,fruit: 'banana', color:'yellow', price: 1.9} ]; 

$(yourfield).select2(
{ 
    id: 'code', 
    data: { results: fruits, text: 'fruit' } 
} 
); 
0

由於我使用AJAX,什麼工作對我來說是返回的東西作爲processResults的ID:

$(field).select2({ 
    ajax: { 
     // [..] ajax params here 
     processResults: function(data) { 
      return { 
       results: $.map(data, function(item) { 
        return { 
         // proccessResults NEEDS the attribute id here 
         id: item.code, 
         // [...] other attributes here 
         foo: item.bar, 
        } 
       }) 
      } 
     }, 
    }, 
});