2013-06-20 13 views
20

Używam wybranych, aby stworzyć zabawny combobox. Wszystko działa dobrze, ale mam pytanie.Czy wybrany combobox jQuery ma różne szerokości w zależności od tego, czy jest otwarty?

Myślę, że lista opcji przyjmuje szerokość podaną w wizualnym panelu combobox. Wszystkie moje opcje są bardzo długie i muszę zrobić bardzo duży combobox, aby uniknąć opcji idących w dwóch linijkach.

Czy jest możliwe zrobienie małego comboboxa, np. 150px, gdy jest zamknięte, i o wiele większego, gdy lista jest otwarta?

Odpowiedz

27

Tak, jest to możliwe. Można to zrobić na 2 sposoby:

  1. Bezpośrednio dodanie stylu "szerokość" do klasy chzn-drop w chosen.css plików.
  2. Dodawanie szerokości za pomocą jQuery.

Wolę 2nd jeden i oto kod:

HTML:

<select class="chzn-select" data-placeholder="select your options" style="width: 150px"> 
    <option value="">option1</option> 
    <option value="option1">option2</option> 
    <option value="option2">option3</option> 
</select> 

jQuery:

$('.chzn-select').chosen(); 
$('.chzn-drop').css({"width": "300px"}); 

Wynik:

Mam nadzieję, że zrozumiałeś.

+0

Dzięki, myślę, że to dobre rozwiązanie. Po prostu spróbuję znaleźć rozwiązanie, aby zastąpić ten 300px adaptacyjnym rozmiarem w zależności od najdłuższego tekstu opcji. – Hugo

+0

@ Hugo Cieszę się, że mogłem ci pomóc. – Praveen

+8

Po prostu zmodyfikuję Twój przykład w następujący sposób: '$ ('. Chzn-drop'). Css ({" width ":" auto "," white-space ":" nowrap "});' i działa dla mnie – Hugo

8

Zatwierdzona odpowiedź jest jednak prawidłowa: można ją również ustawić tak, aby menu rozwijane miało szerokość niezbędną do hostowania zawartości zamiast stałej wartości. Zrobiłem tak, aby nie był mniejszy niż samo pole wyboru.

$('.chosen-drop').css({minWidth: '100%', width: 'auto'}); 
+1

Dobra odpowiedź: auto ftw! – mcfea

2

Można ustawić właściwość width z wybranym inicjatorem.

$(".chosen-select").chosen({ allow_single_deselect: true, disable_search_threshold: 5, width:"100%" }); 
1
$('.chosen-select').each(function() { 
    var $this = $(this); 
    $this.next().css({'width': '225px'}); 
}); 
1

odpowiedź Koenpeter jest po prostu dodanie "width: auto" nie działa dla mnie. Zauważyłem, że można to zrobić w CSS pod następującymi względami:

Powiązane problemy