Posso applicare l'attributo richiesto ai campi <select> in HTML5?


256

Come posso verificare se un utente ha selezionato qualcosa da un <select>campo in HTML5?

Vedo <select>che non supporta il nuovo requiredattributo ... allora devo usare JavaScript? O c'è qualcosa che mi manca? : /


1
Se sei interessato a qualsiasi livello di compatibilità tra browser, probabilmente dovrai utilizzare JavaScript. L'attributo che vuoi è selectedIndex.
Luke Sneeringer,

4
Secondo l'attuale bozza dell'editor delle specifiche HTML5 (6 agosto 2011), l'elemento select ha un attributo richiesto. "L'attributo richiesto è un attributo booleano. Se specificato, all'utente verrà richiesto di selezionare un valore prima di inviare il modulo." dev.w3.org/html5/spec/Overview.html#the-select-element
james.garriss

Risposte:


471

Obbligatorio : avere il primo valore vuoto - le opere necessarie su valori vuoti

Prerequisiti : correggere html5 DOCTYPE e un campo di input denominato

<select name="somename" required>
<option value="">Please select</option>
<option value="one">One</option>
</select>

Come da documentazione (l'elenco e il grassetto sono miei)

L'attributo richiesto è un attributo booleano.
Se specificato, all'utente verrà richiesto di selezionare un valore prima di inviare il modulo.

Se un elemento selezionato

  • ha un attributo obbligatorio specificato,
  • non è stato specificato un attributo multiplo,
  • e ha una dimensione di visualizzazione di 1 (non avere SIZE = 2 o più - omettilo se non necessario);
  • e se il valore del primo elemento opzione nell'elenco di opzioni dell'elemento select (se presente) è la stringa vuota (cioè presente come value=""),
  • e il nodo padre di quell'elemento opzione è l'elemento select (e non un elemento optgroup),

quindi quell'opzione è l'opzione etichetta segnaposto dell'elemento select.


27
Inoltre, in modo che l'utente non possa selezionare la non opzione una volta che è stata selezionata: <opzione selezionata = "selected" disabled = "disabled" value = ""> Please Select </option>
CoolAJ86

2
Questo non ha senso ... Inoltre non funzionerà su diversi browser
mplungjan,

4
@ CoolAJ86 Funziona bene con Chrome 23, Firefox 16 e IE 10.
KTB

15
Vedo 2 downvotes. Se hai voglia di sottovalutare questo commento, PER FAVORE , PERCHÉ
mplungjan

1
La parafrasi della documentazione è molto utile; grazie
skia.heliou

13

L' <select>elemento supporta l' requiredattributo, come da specifica:

Quale browser non lo rispetta?

(Ovviamente, devi convalidare sul server comunque, poiché non puoi garantire che gli utenti abbiano JavaScript abilitato.)


8
Sono sicuro che aveva solo bisogno di un valore = "" alla prima voce - se non c'è alcun attributo valore o un valore su tutte le opzioni, il trigger richiesto non si innescherà perché la selezione restituisce un valore reale
mplungjan

1
@mplungjan: ah , gotcha - ben individuato.
Paul D. Waite,

1
@ PaulD.Waite Non possiamo ancora garantire che gli utenti avranno Javascript abilitato? Sono stato nello sviluppo web solo circa 2 anni e non ho mai riscontrato questo problema.
user137717

2
@ user137717: è il web. Non puoi garantire nulla. Ovviamente puoi decidere che non vale la pena fare un catering.
Paul D. Waite,

5

È possibile utilizzare l' selectedattributo per l'elemento opzione per selezionare una scelta per impostazione predefinita. È possibile utilizzare l' requiredattributo per l'elemento select per assicurarsi che l'utente selezioni qualcosa.

In Javascript, puoi controllare la selectedIndexproprietà per ottenere l'indice dell'opzione selezionata oppure puoi controllare la valueproprietà per ottenere il valore dell'opzione selezionata.

Secondo la specifica HTML5, selectedIndex"restituisce l'indice del primo elemento selezionato, se presente, oppure −1 se non è presente alcun elemento selezionato. E value" restituisce il valore del primo elemento selezionato, se presente, o la stringa vuota se presente nessun elemento selezionato. "Quindi, se selezionatoIndex = -1, allora sai che non hanno selezionato nulla.

<button type="button" onclick="displaySelection()">What did I pick?</button>
<script>
    function displaySelection()
    {
        var mySelect = document.getElementById("someSelectElement");
        var mySelection = mySelect.selectedIndex;
        alert(mySelection);
    }
</script>

1
@Apostle - Smetti di provare a cambiare questa risposta tramite le modifiche. Se ritieni che sia errato, sentiti libero di lasciare la tua risposta.
Brad Larson

@BradLarson All'inizio non ho capito bene: il codice non è una soluzione completa al problema in questa domanda o è un esempio esplicativo dell'ultimo paragrafo di questa risposta. Probabilmente secondo in questo caso. Penso che sia meglio organizzare questo codice come frammento e mostrare il risultato -1. Spiacenti, non ho chiarito prima i commenti.
Apostolo

5

Sì, funziona:

<select name="somename" required>
     <option value="">Please select</option>
     <option value="one">One</option>
</select>

devi mantenere vuota la prima opzione.


1
<form action="">

<select required>

  <option selected disabled value="">choose</option>
  <option value="red">red</option>
  <option value="yellow">yellow</option>
  <option value="green">green</option>
  <option value="grey">grey</option>

</select>
<input type="submit">
</form>

3
Questa risposta si limita a ripetere un esempio precedente senza ulteriori spiegazioni.
james.garriss

1

per prima cosa devi assegnare un valore vuoto nella prima opzione. vale a dire Seleziona qui. Solo quello richiesto funzionerà.


0

Rende vuoto il valore del primo elemento della casella di selezione.

Quindi ogni volta che pubblichi il FORM ottieni un valore vuoto e, in questo modo, sapresti che l'utente non ha selezionato nulla dal menu a discesa.

<select name="user_role" required>
    <option value="">-Select-</option>
    <option value="User">User</option>
    <option value="Admin">Admin</option>
</select>

0

Devi impostare l' valueattributo di optionsulla stringa vuota:

<select name="status" required>
    <option selected disabled value="">what's your status?</option>
    <option value="code">coding</option>
    <option value="sleep">sleeping</option>
</select>

selectrestituirà il valueselezionato optional server quando l'utente preme submitsul form. Un vuoto valueequivale a un textinput vuoto -> solleva il requiredmessaggio.


W3Schools

L'attributo value specifica il valore da inviare a un server quando viene inviato un modulo.

Esempio


0

prova questo, funzionerà, ho provato questo e questo funziona.

<!DOCTYPE html>
<html>
<body>

<form action="#">
<select required>
  <option value="">None</option>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>
<input type="submit">
</form>

</body>
</html>

0

Funziona perfettamente se il valore della prima opzione è null. Spiegazione: HTML5 leggerà un valore nullo all'invio del pulsante. Se non è nullo (attributo valore), si presume che il valore selezionato non sia nullo, quindi la validazione avrebbe funzionato, cioè controllando se ci fossero dati nel tag opzione. Pertanto non produrrà il metodo di convalida. Tuttavia, suppongo che l'altro lato diventi chiaro, se l'attributo value è impostato su null ie (value = ""), HTML5 rileverà un valore vuoto sulla prima o piuttosto l'opzione selezionata di default dando così il messaggio di validazione. Grazie per avermelo chiesto. Felice di aiutare. Sono contento di sapere se l'ho fatto.


-1

In html5 puoi fare usando l'espressione completa:

<select required="required">

Non so perché la breve espressione non funzioni, ma prova questa. Risolverà.


-4

Prova questo

<select>
<option value="" style="display:none">Please select</option>
<option value="one">One</option>
</select>

-6

Puoi farlo anche in modo dinamico con JQuery

Impostare richiesto

$("#select1").attr('required', 'required');

Rimuovi richiesto

$("#select1").removeAttr('required');
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.