2010-03-25 34 views

Trả lời

34

Bạn sẽ có thể đặt hình ảnh spinner bên cạnh trường bằng tính năng tự động hoàn tất và ẩn nó ban đầu. Sau đó, sử dụng các chức năng gọi lại để ẩn/hiện nó.

Sau đó sử dụng các tùy chọn tìm kiếm để hiển thị các spinner và cởi mở để ẩn nó:

v1.8 và dưới

$(".selector").autocomplete({ 
    search: function(event, ui) { 
     $('.spinner').show(); 
    }, 
    open: function(event, ui) { 
     $('.spinner').hide(); 
    } 
}); 

v1.9 và lên

$(".selector").autocomplete({ 
    search: function(event, ui) { 
     $('.spinner').show(); 
    }, 
    response: function(event, ui) { 
     $('.spinner').hide(); 
    } 
}); 
+5

và như một lưu ý phụ - một nơi tuyệt vời cho spinners = http: //www.ajaxload.info/ – woolyninja

+4

Vấn đề với giải pháp này là spinner không bị ẩn nếu đáp ứng chứa kết quả bằng không vì sự kiện mở không được tạo ra trong trường hợp đó. Kiểm soát thực sự phải có sự kiện "tìm kiếm đã hoàn thành" được gọi là không phân biệt kết quả đếm. Lập kế hoạch wiki http://wiki.jqueryui.com/w/page/12137709/Autocomplete làm cho tham chiếu đến một sự kiện như vậy gọi là "phản hồi" nhưng nó dường như chưa được triển khai. – stefann

+0

Apprently jQuery UI 1.9 bao gồm một bản sửa lỗi cho vấn đề này http://bugs.jqueryui.com/ticket/6777 – stefann

38

Giải pháp của tôi là sử dụng lớp CSS tải tự động hoàn thành. được thêm vào và loại bỏ trên các yếu tố đầu vào trong khi yêu cầu ajax GET đang trong quá trình:

input[type='text'].ui-autocomplete-loading { 
    background: url('/icons/loading.gif') no-repeat right center; 
} 

Cấp nó không phải là một giải pháp rất linh hoạt vì bạn không thể hiển thị spinner ngoài yếu tố đầu vào nhưng trong trường hợp của tôi nó chính xác UX tôi đang tìm kiếm.

+1

Tôi đã thử nó và nó đã hoạt động. Nó thay đổi toàn bộ nền thành hình tròn, điều này không tốt khi nền là một màu khác (ví dụ: hộp văn bản màu trắng trên nền màu xanh). Tôi đã sử dụng các mục sau: .ui tự động hoàn tất tải { hình nền: url ('/ Content/Images/ui-anim_basic_16x16.gif'); background-repeat: không lặp lại, vị trí nền: trung tâm bên phải; } – Losbear

3

Giải pháp CSS

Nếu các yếu tố tải là một anh chị em ruột của việc kiểm soát đầu vào sau đó CSS ​​chung combinator anh chị em (~) có thể được sử dụng:

.loading { 
    /* whatever */ 
} 
#autocomplete.ui-autocomplete-loading ~ .loading { 
    background-image: url(loading.gif); 
} 

Working example
Alternate (jQuery) solution

-2
input[type='text'].ui-autocomplete-loading { 

background: url('http://www.hsi.com.hk/HSI-Net/pages/images/en/share/ajax-loader.gif')   no-repeat 
right center; 

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