<WYBIERZ wiele> - jak zezwolić na wybranie tylko jednej pozycji?


134

Mam <SELECT multiple>pole z wieloma opcjami i chcę, aby w tym samym czasie była wybrana tylko jedna opcja, ale użytkownik może przytrzymać klawisz CTRL i wybrać więcej elementów jednocześnie.

Czy jest jakiś sposób, jak to zrobić? (Nie chcę usuwać „wielu”).


5
Co? Czemu? To wymaga więcej wyjaśnień.
— Dai,

5
Nie używając wielu z wybranym? :)
— GordonM

5
@GordonM tak, całkowicie: PI szukał dzisiaj tego samego, ponieważ chciałem pokazać wiele elementów (co wynika z multipleatrybutu) bez możliwości wybrania wielu. Zapomniałem, że został wywołany atrybut do tego size, więc najlepsza odpowiedź dobrze mi służyła :)
— Luc

Osobiście mam pole wyboru wielokrotnego, w którym mam cztery opcje i chcę trzy z nich, aby można było je wybrać, ale czwarta musi być sama ")
— RWolfe

Odpowiedzi:


281

Po prostu nie wybieraj wielokrotności, ale ustaw jej rozmiar, na przykład:

  <select name="user" id="userID" size="3">
    <option>John</option>
    <option>Paul</option>
    <option>Ringo</option>
    <option>George</option>
  </select>

Przykład roboczy: https://jsfiddle.net/q2vo8nge/


Czy można programowo policzyć całkowitą liczbę opcji <option> w atrybucie rozmiaru?
— MyName

@Natasha Wartość pola rozmiaru można uzyskać za pomocą jquery :-)
— Vladimir verleg

Informacje dotyczące rozmiaru: Umieszczenie pojemnika selectw display: flexpojemniku i zrobienie flex-grow: 1tego selectspowoduje, że będzie on traktowany size="3"jako minimalna wysokość, a następnie przyciągnie wysokość całego pojemnika do maksymalnego możliwego rozmiaru w pojemniku. jsfiddle.net/z1gypahs
— Torxed

25

Jeśli użytkownik powinien wybrać tylko jedną opcję naraz, po prostu usuń „wiele” - dokonaj normalnego wyboru:

  <select name="mySelect" size="3">
     <option>Foo</option>
     <option>Bar</option>
     <option>Foo Bar</option>
     <option>Bar Foo</option>
  </select>

Skrzypce


9

Dlaczego nie chcesz usunąć multiple atrybutu? Celem tego atrybutu jest wskazanie przeglądarce, że można wybrać wiele wartości z danego selectelementu. Jeśli należy wybrać tylko jedną wartość, usuń atrybut, a przeglądarka będzie wiedziała, że ​​zezwala tylko na jeden wybór.

Użyj narzędzi, które masz, do tego służą.


1
ah. atrybut rozmiaru działa również samodzielnie. nie zauważyłem. dzięki
— simPod

6
@simPod rozumowanie jest takie, że czasami klienci muszą zobaczyć wszystkie opcje przed sobą, ale mogą wybrać tylko jedną z nich. Minęło tyle czasu, odkąd napisałem „prawdziwy” html, że musiałem wygooglować / znaleźć odpowiedź ... Och, dzięki Bogu za kilka dni StackOverflow.
— Richard B

1

Domyślnie potrzebujesz tylko jednej opcji, ale użytkownik może wybrać wiele opcji, naciskając klawisz CTRL. Dokładnie tak (już) ma zachowywać się wielokrotność SELECT.

Zobacz: http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select_multiple

Czy możesz wyjaśnić swoje pytanie?


Awww Teraz rozumiem pytanie, dzięki Marcosowi Placonie. Pierwsze pytanie nie było dobrze sformułowane.
— Cogicero,

Chociaż osobiście uważam, że jest to „niesprawiedliwe” dla doświadczenia użytkownika, gdy wyświetlasz wiele opcji do wyboru, ale użytkownik może wybrać tylko jedną.
— Cogicero

1
zależy od sytuacji
— simPod

1

Przychodzę tutaj po przeszukaniu google i zmienię coś na moim końcu.

Po prostu zmieniam ten przykład i będzie on działał z jQuery w czasie wykonywania.

$('select[name*="homepage_select"]').removeAttr('multiple')

http://jsfiddle.net/ajayendra2707/ejkxgy1p/5/


4
Zasadniczo robisz to, co robi zaakceptowana odpowiedź, ale w zawiły sposób. Zamiast usuwać atrybut wielokrotny w czasie wykonywania, możesz po prostu usunąć go bezpośrednio w kodzie HTML. jsfiddle.net/3rkk6m9a
— Harry

1
<select name="flowers" size="5" style="height:200px">
 <option value="1">Rose</option>
 <option value="2">Tulip</option>
</select>

To proste rozwiązanie pozwala uzyskać wizualną listę opcji, ale można wybrać tylko jedną.


4
Witamy w SO. Proszę dodać szczegółowy opis
— Andriy Ivaneyko

1

Miałem kilka problemów z select \ multi-select, to właśnie mi pomogło

<select name="mySelect" multiple="multiple">
    <option>Foo</option>
    <option>Bar</option>
    <option>Foo Bar</option>
    <option>Bar Foo</option>
</select>

0

Spóźniona odpowiedź, ale może pomóc komuś innemu, oto jak to zrobić bez usuwania atrybutu „wiele”.

$('.myDropdown').chosen({
    //Here you can change the value of the maximum allowed options
    max_selected_options: 1
});

Uwaga: Wymaga to wtyczki jQuery Chosen: harvesthq.github.io/chosen
— smolo
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.