Domanda

Nel mio esempio specifico, ho a che fare con un menu a discesa, ad esempio:

<select name="foo" id="bar">
  <option disabled="disabled" selected="selected">Select an item:</option>
  <option>an item</option>
  <option>another item</option>
</select>

Naturalmente, questo è piuttosto insensato, ma mi chiedo se sia definito un comportamento rigoroso.Opera rifiuta effettivamente l'attributo 'selezionato' e seleziona l'elemento successivo nell'elenco.Tutti gli altri browser sembrano consentirlo e rimane selezionato.

Aggiornamento: Per essere chiari, a me interessa specificatamente la selezione iniziale.Ho a che fare con uno di quei menu a discesa del tipo "Seleziona un elemento:", nel qual caso la prima opzione è in realtà un'etichetta e si verifica un'azione onchange().Questo è abbastanza beh "progressivamente migliorato", nel senso che è presente un pulsante di invio e rimosso solo tramite JavaScript.Se l'opzione "seleziona..." venisse rimossa, qualunque cosa dovesse diventare la prima voce non sarebbe selezionabile.Stiamo semplicemente escludendo? onchange menu a discesa o l'opzione "seleziona..." dovrebbe essere selezionabile, ma senza alcun effetto?

È stato utile?

Soluzione

In risposta all'aggiornamento nella domanda, direi che l'opzione 'etichetta' dovrebbe essere selezionabile ma non farla fare nulla al momento dell'invio o tramite JavaScript, non consentire l'invio del modulo senza che venga selezionato un valore (supponendo che sia un campo obbligatorio).

Dal punto di vista dell'usabilità suggerirei di fare entrambe le cose, in questo modo tutte le basi sono coperte.

Altri suggerimenti

Le specifiche HTML sono un po' vaghe (es.completamente assente) riguardo a questa strana combinazione.Dicono che un elemento del modulo con l'attributo disabilitato impostato non dovrebbe avere successo, quindi è davvero così non posso essere selezionato.

Il browser potrebbe visualizzarlo in modo che appaia selezionato, ma non dovrebbe essere visualizzato nei dati POST.Sembra che Opera abbia capito bene secondo me.

Le specifiche HTML affermare che sia selezionato che disabilitato sono opzioni disponibili per <option> elemento, ma non specifica cosa dovrebbe accadere in caso di conflitto.Nel sezione sui controlli disabilitati dice

Se impostato, l'attributo disabilitato ha i seguenti effetti su un elemento:

  • I controlli disabilitati non ricevono lo stato attivo.
  • I controlli disabilitati vengono saltati nella navigazione tramite schede.
  • I controlli disabilitati non possono avere successo.

dice anche

Il modo in cui vengono visualizzati gli elementi disabilitati dipende dall'agente utente.Ad esempio, alcuni user agent "visualizzati in grigio" hanno disabilitato le voci di menu, le etichette dei pulsanti, ecc.In questo esempio, l'elemento INPUT è disabilitato.Pertanto, non può ricevere l'input dell'utente né il suo valore verrà inviato con il modulo.

Sebbene questo caso specifico non sia specificato, la mia lettura dice che il rendering effettivo di un elemento "selezionato" "disabilitato" è lasciato al browser.Finché l'utente non può selezionarlo, funziona normalmente.Dice che uno script può agire sull'elemento, quindi è possibile per Javascript impostare un'opzione disabilitata come selezionata (o disabilitare un'opzione selezionata).Ciò non è contrario agli standard, ma all'invio del modulo, il valore di tale opzione non potrebbe essere il valore selezionato.L'elenco di selezione dovrebbe (presumo) dover avere un valore vuoto in questo caso.

Secondo la specifica HTML 4.01, Disabilitato È un attributo standard per l'elemento opzione, ma il comportamento è probabilmente indeterminato in base allo standard (leggi le informazioni sull'elemento select e sugli elementi options.Ecco una parte che penso possa far luce sulle ragioni di Opera per la loro implementazione:

Quando impostato, l'attributo disabilitato ha i seguenti effetti su un elemento:
* I controlli disabilitati non ricevono il focus.
* I controlli disabilitati vengono saltati nella navigazione tramite schede.
* I controlli disabilitati non possono avere successo.

Quindi, è molto probabile che questa sia solo una di quelle cose in cui le specifiche sono abbastanza vaghe da consentire entrambe le interpretazioni.Questo è il tipo di idiosincrasia che rende la programmazione per il web così divertente e gratificante.:P

Stiamo solo escludendo del tutto "Onchange", o dovrebbe essere selezionabile l'opzione "Select ...", solo senza alcun effetto?

I menu a discesa "onchange" sono disapprovati dai tipi più ossessionati dagli standard.

In genere eseguirei una convalida lato client.Tipo "Seleziona un elemento dal menu a discesa".cioè.

l'opzione "seleziona..." dovrebbe essere selezionabile, senza alcun effetto?

Quindi ho semplicemente detto "Sì" alla tua domanda A o B.:/ Scusa!

sfortunatamente non ha molta importanza cosa dovrebbe succedere, perché IE non supporta l'attributo disattivato nel periodo delle opzioni.

http://webbugtrack.blogspot.com/2007/11/bug-293-cant-disable-options-in-ie.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top