2013-01-24 30 views
9

Hiện tại chúng tôi đang sử dụng Chosen Dropdown Plugin, điều này khá tuyệt vời, ngoài một vấn đề nhỏ. Khi chúng tôi đang sử dụng một menu thả xuống, nếu bạn tab vào điều khiển 'đã chọn', phần thả xuống thực tế sẽ không được hiển thị. Tuy nhiên, khi áp dụng plugin cho nhiều 'chọn', nó sẽ xuất hiện.Plugin jQuery Chosen: Chụp tiêu điểm để mở khi tabbing

Đã trải qua các tài liệu và các vấn đề GitHub, có vẻ như có rất nhiều đề cập đến việc sắp xếp và tập trung vào tab, nhưng không có gì dường như đề cập đến yêu cầu khá đơn giản này; Hiển thị menu thả xuống khi nhận tiêu điểm khi tabbing.

Vì vậy, giả sử rằng chức năng này không phải là một phần của plugin, có cách thay thế chẳng hạn như chụp trọng tâm của thẻ neo không?

$('.chzn-single').focus(function(e){ 
    alert('I should be focused!') 
});  

Cho đến nay, tôi chưa thành công và đang tự hỏi liệu có người nào khác gặp sự cố này không. Bạn có thể kiểm tra jsfiddle này chứng tỏ vấn đề

Trả lời

8
  1. Bạn nên theo dõi các sự kiện tập trung cho đầu vào tìm kiếm thats bên chọn conainer, không phải là yếu tố neo, sau đó kích hoạt sự kiện mousedown cho container lựa chọn - đó là sự kiện rằng nó nghe khi mở một thả xuống

  2. bạn cần phải sử dụng cách tiếp cận các sự kiện giao để ràng buộc xử lý sự kiện đến các yếu tố bổ sung động (đối với jquery 1.7.1 và trước đó bạn chỉ có thể sử dụng phương pháp 'sống')

  3. Bạn cũng cần kiểm tra xem vùng chứa có đang hoạt động hay không hiện nay, để tránh các cuộc gọi đệ quy (khi thả xuống chọn được mở ra - tìm kiếm đầu vào sẽ được tập trung lại)

 
$('body').on('focus', '.chzn-container-single input', function() { 
    if (!$(this).closest('.chzn-container').hasClass('chzn-container-active')) 
     $(this).closest('.chzn-container').trigger('mousedown'); 
     //or use this instead 
     //$('#select').trigger('liszt:open'); 
}); 

Dưới đây là làm việc jsfiddle

Thay vì $(this).closest('.chzn-container').trigger('mousedown'); bạn cũng có thể kích hoạt sự kiện nội bộ plugin: $('#select').trigger('liszt:open');

+0

Fiddle không hoạt động nữa. Có lẽ bạn có thể sử dụng các tệp [cdnjs '] (http://cdnjs.cloudflare.com/ajax/libs/chosen/1.0/chosen.jquery.js) làm externals? – Jawa

+0

@Jawa bạn nói đúng là nó đã sử dụng plugin "đã chọn" js không còn khả dụng nữa do liên kết được sử dụng trong câu hỏi. Tôi đã cập nhật jsfiddle bằng cdn bạn đã đề cập, nó có một vài lớp khác cho điều khiển chọn - tôi đã cập nhật chúng trong jsfiddle cho phù hợp. – paulitto

+0

Cảm ơn rất nhiều! Tôi đã sử dụng: $ (tài liệu) .on ("focus", ".chosen-container-single input", hàm() {$ (this) .closest ('. Selected-container-single'). ".chosen-container-active"). trigger ('mousedown');}); – colinbashbash

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