2013-01-24 14 views
9

Obecnie używamy modelu Chosen Dropdown Plugin, który jest raczej świetny, z wyjątkiem jednego pomniejszego problemu. Kiedy używamy pojedynczego menu rozwijanego, jeśli przejdziesz do kontrolki "wybrane", faktyczna lista rozwijana nie zostanie wyświetlona. Jednak przy stosowaniu wtyczki do wielokrotnego "wybierz" pojawia się.jQuery Chosen Plugin: Przechwytywanie fokusu otwierania przy zakładaniu tabulatora

Po przejrzeniu dokumentacji i problemów z GitHubem, wydaje się, że jest wiele wzmianek dotyczących porządkowania kart i ustawiania ostrości, ale nic, co pozornie nie zajmuje się tym raczej prostym wymogiem; Wyświetlaj listę rozwijaną podczas otrzymywania fokusa podczas przechwytywania.

Zakładając, że ta funkcja nie jest częścią wtyczki, czy istnieje alternatywa, taka jak przechwytywanie fokusu znacznika zakotwiczenia?

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

Do tej pory nie udało mi się i zastanawiałem się, czy inni nie doświadczyli tego problemu. Można sprawdzić to jsfiddle który demonstruje problem

Odpowiedz

8
  1. powinni śledzić imprezy ostrości dla wejścia wyszukiwania ów wewnątrz wybranej conainer, a nie elementu kotwicy, a następnie wywołać MouseDown zdarzenie dla wybranego pojemnika - to wydarzenie że słucha kiedy otwierając rozwijaną

  2. trzeba użyć podejście delegowanego wydarzeń wiążą obsługi zdarzeń do elementów dodawanych dynamicznie (dla jQuery 1.7.1 i wcześniej może po prostu użyć metody „na żywo”)

  3. Musisz również sprawdzić, czy kontener jest aktywny Obecnie, aby uniknąć wywołania rekurencyjne (gdy wybrany rozwijana zostanie otwarty - szukaj wejście zostanie ponownie skupiła)

 
$('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'); 
}); 

Tutaj działa jsfiddle

Zamiast $(this).closest('.chzn-container').trigger('mousedown'); można również wywołać wewnętrzny zdarzenie pluginu: $('#select').trigger('liszt:open');

+0

Fiddle już nie działa. Może mógłbyś użyć plików [cdnjs '] (http://cdnjs.cloudflare.com/ajax/libs/chosen/1.0/chosen.jquery.js) jako zewnętrznych? – Jawa

+0

@Jawa masz rację użył "wybranej" wtyczki js, która nie jest już dostępna za pomocą linku, którego użyto w pytaniu. Zaktualizowałem jsfiddle używając cdn, o którym wspomniałeś, miało nieco inne klasy dla kontroli wyboru - zaktualizowałem je odpowiednio w jsfiddle. – paulitto

+0

Dziękuję bardzo! Skończyło się na: $ (document) .on ("focus", ".chosen-container-single input", function() {$ (this) .closest (". Selected-container-single"). ".chosen-container-active"). trigger ("mousedown");}); – colinbashbash

Powiązane problemy