2013-02-18 5 views
12

Quando si esegue il rendering di un menu a discesa di selezione come di seguito, iPhone lo rende vuoto. Come posso risolvere questo?<select> con attributo size: iPhone restituisce vuoto

<select size="3"> 
    <option value="volvo">Volvo</option> 
    <option value="saab">Saab</option> 
    <option value="opel">Opel</option> 
    <option value="audi">Audi</option> 
</select> 

L'esempio precedente da http://www.w3schools.com/tags/att_select_size.asp. Il loro campione è http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select_size

In Firefox (e tutti gli altri browser), rende come:

Firefox example rendered select dropdown

Tuttavia, su un iPhone, è reso vuota. Questo è molto brutto per l'usabilità in quanto il visitatore non sa cosa c'è nella scatola (nella nostra applicazione, è per selezionare il loro indirizzo da diverse possibilità).

iPhone example rendering

Ho creato un JSFiddle: http://jsfiddle.net/bqMEv/3/ La resa iPhone è il seguente; notare che non c'è niente mostrato quando entrambi:

  • dimensione è maggiore di 1
  • e l'altezza è specificato nel CSS
  • e nessuna opzione è selezionata

Rendering from JSFiddle

Rimozione del CSS height mostra che l'iPhone ignora l'attributo size.

Removing CSS height

+0

Invece di utilizzare 'size = "3"', provare a utilizzare una regola CSS 'selezionare {width: 10px; } ' –

+1

Non hai alcuna opzione come" ", è fatta per lo scopo? –

+0

Utilizzando il codice di esempio sopra, non esiste un tipo di auto PRE-selezionato. Per fare ciò, è necessario aggiungere "- Seleziona il tipo di auto -" o simile all'HTML. Nella mia domanda, stai selezionando il tuo indirizzo di casa da un elenco di indirizzi; Non so quale scegliere. – GlennG

risposta

5

Sembra che non esiste un modo standard per farlo, in base al contenuto di altri argomenti su stack overflow:

Ma autore del secondo argomento ha scritto un plug-in che emula tale comportamento: https://github.com/redhotsly/safarimobile-multiline-select

+0

http://forums.macrumors.com/showthread.php?t=324849 – GlennG

+0

Sembra che iOS non supporti i normali attributi HTML di dimensioni> 1 o selezioni multiple. Si deve ricorrere a JavaScript come soluzione temporanea se il progetto richiede widget in stile 'raccoglitore'. – GlennG

2

Se avete bisogno di visualizzare una delle opzioni, utilizzare il seguente: HTML selected Attribute

enter image description here



Sito personale in firefox:

enter image description here

+0

Il problema è che non viene selezionato nulla finché l'utente non ha selezionato qualcosa. Il caso d'uso è che hai inserito il tuo codice postale in una pagina precedente, cerchiamo gli indirizzi, quindi li visualizziamo in una lista di selezione a più righe per consentirti di scegliere il tuo indirizzo. L'iPhone lo rende come un grande widget vuoto; tutto il resto lo mostra con molte righe di indirizzi. – GlennG

+0

@GlennG Metti l'attributo 'selected' per rendere preselezionato un valore, c'è un riferimento alla risposta e quello che vedi sullo screenshot è la prima volta che apro il menu a discesa senza selezionare nulla (notare il segno di spunta sull'opzione con attributo 'selected') –

+0

Usando il codice di esempio, qual è la tua auto PRE-SELEZIONATA? L'unico modo per farlo funzionare è aggiungere una nuova opzione "- Seleziona auto -", ma questo cambia l'HTML. – GlennG

0

Sembra che le persone qui potrebbero non comprendere pienamente lui emette. Il problema è che il browser iOS non renderà l'etichetta per il primo campo non selezionabile, che in genere sarà un indicatore di tipo "Seleziona ...". Se non è selezionato, iOS lo rende vuoto. Questo non è desiderabile, perché ci sono delle scelte da fare per l'utente, ma il campo appare vuoto.

Non è possibile impostarlo anche programmato per visualizzare "Seleziona", perché se il campo è richiesto, la convalida del modulo non funziona più, poiché il browser considera il primo campo come selezionato, anche se è contrassegnato come non selezionabile.

Il "Bug" è che il browser iOS non visualizza l'etichetta per il primo campo, quando è impostato come non selezionabile.

2

mio semplice correzione di questo, utilizzando jQuery:

$(document).ready(function(){ 
if(navigator.userAgent.match(/(iPhone|iPod|iPad)/i)) { 
$('#my_select_box').prepend('<option value="" selected="selected" disabled="disabled">..Please select something</option>'); 
} 
}); 

funziona così:

  1. Attendere che il documento per caricare

  2. Se l'utente visita il sito utilizzando un iPhone, iPod o iPad esegui lo script

  3. Aggiungi un selezionato e disa opzione cancellata nella parte superiore dell'elenco di selezione, con il testo "... selezionare qualcosa".

non fa nulla in tutti gli altri browser, funziona alla grande: D