2013-04-10 31 views
10

Tôi đang sử dụng select2 cho các hộp tìm kiếm của mình. Tôi nhận được kết quả từ URL của mình nhưng tôi không thể chọn tùy chọn từ nó. Tôi muốn sử dụng 'product.productName' làm văn bản được hiển thị sau khi lựa chọn. Có bất cứ điều gì mà tôi đã bỏ lỡ hoặc bất kỳ sai lầm mà tôi đã thực hiện. Tôi đã bao gồm select2.css và select2.min.js, jquery.jsKhông thể chọn kết quả từ kết quả tìm kiếm 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; 
      } 
     }); 
    }); 

Đây là resut_object tôi

"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"}] 

Trả lời

34

Bạn đang thiếu thuộc tính id cho dữ liệu kết quả. nếu nó không có, nó làm cho tùy chọn "không thể chọn".

Ví dụ:

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

Tiết kiệm thời gian của tôi !! ... Họ có tài liệu khủng khiếp .. họ dụ AJAX! nên đề cập đến điều này ... –

+0

Telvin, liên kết bị hỏng .. Và btw thêm ID đã không tạo sự khác biệt cho tôi. –

+0

@AlexanderSuraphel Câu trả lời này xảy ra cách đây bốn năm và nó được cho là giải quyết vấn đề OP, trong trường hợp liên kết bị hỏng nên tôi đặt mã ví dụ để chỉ ra, vì vậy tham chiếu không quan trọng. Các plugin cũng nhận được cập nhật và nhiều thứ đã được thay đổi. Bây giờ tôi không biết vấn đề của bạn là gì. Lấy làm tiếc. –

0

tôi đã phải đối mặt với cùng một vấn đề, giải pháp khác cho vấn đề này là: -

Trong đối tượng trả lời của bạn (Để đối phó trên Chi tiết sản phẩm đối tượng) phải có một "id" như là chìa khóa và giá trị cho điều đó.

Ví dụ: - đối tượng phản ứng đưa ra ở trên của bạn phải như thế này

{ "id": "1", "productName": "samsung galaxy s3", "nhà sản xuất": "Samsung", "productOptions" : "Màu; Memory", "productOptiondesc": "Bạc; 32GB"}

SO bạn không cần id này: function (object) {return object.key;}

0

id param thể là một chuỗi liên quan đến tên thuộc tính đối tượng và phải nằm trong thư mục gốc của đối tượng. Văn bản bên trong đối tượng dữ liệu.

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

Kể từ khi tôi đã sử dụng AJAX, những gì làm việc cho tôi là trở về một cái gì đó như là ID trên processResults:

$(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, 
        } 
       }) 
      } 
     }, 
    }, 
}); 
Các vấn đề liên quan