<SELEZIONA multiplo>: come consentire solo un elemento selezionato?


134

Ho un <SELECT multiple>campo con più opzioni e voglio permettergli di avere una sola opzione selezionata contemporaneamente ma l'utente può tenere premuto il tasto CTRL e selezionare più elementi contemporaneamente.

C'è un modo per farlo? (Non voglio rimuovere "multipli").


5
Che cosa? Perché? Questo ha bisogno di più spiegazioni.
— Dai

5
Non usando multipli con la tua selezione? :)
— GordonM,

5
@GordonM sì, assolutamente: PI stava cercando lo stesso oggi perché volevo mostrare più elementi (il che è implicito con l' multipleattributo) senza essere in grado di selezionarne più. Ho dimenticato che l'attributo per fare questo è stato chiamato size, quindi la risposta migliore mi ha servito bene :)
— Luc

Personalmente ho selezionato un campo multiplo in cui ho quattro opzioni e voglio che tre delle opzioni possano essere selezionate, ma la quarta deve essere sola se selezionata perché si scontrerebbe con le altre tre (3 opzioni e una "nessuna ")
— RWolfe,

Risposte:


281

Basta non renderlo un multiplo selezionato, ma impostarne una dimensione, ad esempio:

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

Esempio di lavoro: https://jsfiddle.net/q2vo8nge/


È possibile contare programmaticamente il numero totale di <opzione> nell'attributo size?
— MyName

@Natasha Puoi ottenere il valore del campo della dimensione usando jquery :-)
— Vladimir verleg

Informazioni rilevanti sulla dimensione: posizionando l' selectinterno di un display: flexcontenitore, e fare ciò flex-grow: 1, lo selectfarà trattare size="3"come un'altezza minima, quindi agganciare l'altezza dell'intera selezione alla dimensione massima possibile all'interno del contenitore. jsfiddle.net/z1gypahs
— Torxed

25

Se l'utente deve selezionare solo un'opzione alla volta, basta rimuovere il "multiplo" - effettuare una selezione normale:

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

Violino


9

Perché non vuoi rimuovere l' multipleattributo? Lo scopo di tale attributo è quello di specificare al browser che è possibile selezionare più valori dall'elemento specificato select. Se è necessario selezionare un solo valore, rimuovere l'attributo e il browser saprà consentire una sola selezione.

Usa gli strumenti che hai, ecco a cosa servono.


1
ah. l'attributo size funziona anche da solo. non notato. grazie
— simPod

6
@simPod il ragionamento è perché ci sono momenti in cui i clienti devono vedere tutte le opzioni davanti a loro, ma possono sceglierne solo 1. È passato così tanto tempo da quando ho scritto HTML "reale", che ho dovuto cercare su Google / bing la risposta ... Oh, grazie al cielo per StackOverflow alcuni giorni.
— Richard B,

1

Si desidera solo un'opzione per impostazione predefinita, ma l'utente può selezionare più opzioni premendo il tasto CTRL. Questo è (già) esattamente il comportamento del multiplo SELECT.

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

Puoi chiarire la tua domanda per favore?


Awww capisco la domanda ora, grazie a Marcos Placona. La domanda iniziale non era ben formulata.
— Cogicero,

Anche se personalmente ritengo che sia "ingiusto" l'esperienza dell'utente quando mostri più opzioni di selezione, ma l'utente può selezionarne solo una.
— Cogicero,

1
dipende dalla situazione
— simPod

1

Vengo qui dopo aver cercato su Google e cambiare le cose alla mia estremità.

Quindi cambio solo questo esempio e funzionerà con jquery in fase di esecuzione.

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

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


4
In pratica stai facendo quello che sta facendo la risposta accettata, ma in modo contorto. Invece di rimuovere l'attributo multiplo in fase di runtime, puoi semplicemente rimuoverlo direttamente nell'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>

Questa semplice soluzione consente di ottenere visivamente un elenco di opzioni, ma di poterne selezionare solo una.


4
Benvenuti in SO. Per favore, aggiungi una descrizione dettagliata
— Andriy Ivaneyko,

1

Ho avuto dei rapporti con il select \ multi-select, questo è ciò che mi ha aiutato

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

0

In ritardo per rispondere, ma potrebbe aiutare qualcun altro, ecco come farlo senza rimuovere l'attributo "multiplo".

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

Nota: questo richiede il plugin jQuery Chosen: harvesthq.github.io/chosen
— smolo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.