2012-09-14 28 views
7

liên kết đến fiddle: http://jsfiddle.net/nEapJ/ (làm việc)jquery-ui autocomplete: set nguồn bởi hàm callback không làm việc

var items = [{ 
    label : 'a', 
    value : 'a', 
},{ 
    label : 'b', 
    value : 'b', 
},{ 
    label : 'c', 
    value : 'c', 
}]; 

$('input').autocomplete({ 
    source : items 
});​ 

Mã này hoạt động, nhưng khi tôi muốn thiết lập nguồn bởi hàm callback sau đó Nó không làm việc

liên kết đến fiddle: http://jsfiddle.net/B3RWj/ (không hoạt động)

$('input').autocomplete({ 
    source : function(request, response){ 
      response(items); 
      } 
});​ 

khi tôi gõ, 'a' sau đó gi nó đã a, b, c là kết quả.

Vì vậy, tôi đang thiếu gì?

cảm ơn trước.

Trả lời

2

Trong hàm callback đó là tùy thuộc vào bạn để làm các việc lọc ..

Extract từ documentation:

Các biến thể thứ ba, gọi lại, cung cấp sự linh hoạt nhất, và có thể được sử dụng để kết nối bất kỳ nguồn dữ liệu nào với Tự động điền. Gọi lại nhận được hai đối số:

Đối tượng yêu cầu, với một thuộc tính duy nhất được gọi là "thuật ngữ", đề cập đến với giá trị hiện tại trong nhập văn bản. Ví dụ: khi người dùng nhập "new yo" vào trường thành phố, cụm từ Tự động hoàn thành sẽ bằng "new yo". Một cuộc gọi trả lời, mà dự kiến ​​một đối số duy nhất để chứa dữ liệu để đề xuất cho người dùng. Dữ liệu này nên được lọc dựa trên thuật ngữ được cung cấp và có thể ở bất kỳ định dạng nào được mô tả ở trên cho dữ liệu cục bộ đơn giản (String-Array hoặc Object-Array với nhãn/giá trị/cả hai thuộc tính). Điều quan trọng là khi cung cấp tùy chọn nguồn gọi tùy chỉnh để xử lý lỗi trong khi yêu cầu. Bạn phải luôn luôn gọi lại cuộc gọi trả lời ngay cả khi bạn gặp phải lỗi. Điều này đảm bảo rằng tiện ích luôn có trạng thái chính xác.

+2

tôi nghĩ rằng, jquery-ui tự động hoàn thành bộ lọc tự động bằng cách gõ charcters bằng cách khớp với khóa nhãn trong nguồn đã cho .. –

+1

trên thực tế, bộ lọc tự động chỉ dành cho * tùy chọn nguồn * cục bộ –

1

xem mã:

$('input').autocomplete({ 
    source : function(request, response){ 
     var term = request.term; 
     var result = []; 

     //make your code here to filter the item by term. 
     //put them into the result array such as. 

     response(result);//this will show in the selection box. 
    } 
});​ 
0

Nếu bạn muốn sử dụng chức năng gọi lại thay vì một mảng nguồn hoặc chuỗi bạn phải thêm response($.ui.autocomplete.filter(items, request.term));

trong hàm của bạn:

source : function(request, response){}

Đây là những gì tự động hoàn thành e thực hiện khi bạn xác định nguồn của mình dưới dạng mảng hoặc chuỗi, nhưng đối với các cuộc gọi lại, bạn phải thêm phần này.

Các vấn đề liên quan