valore degli elementi selezionati con “e.value” vs “e.options .value”

Dato l’HTML:

 test1 test2 test3  

e la javascript:

 var e = document.getElementById('mySelect'); 

Per ottenere il valore della selezione posso usare e.value ed e.options[e.selectedIndex].value .

Sono consapevole che e.options[e.selectedIndex].value mi darà il valore selezionato (1,2 o 3) ed e.options[e.selectedIndex].text mi darebbe test1, test2, test3 a seconda di quale sia selezionato.

e.value bene usare solo e.value ? era un problema nei vecchi browser?
che è più corretto: e.value vs e.options[e.selectedIndex].value ?

jsFiddle

L’interfaccia HTMLSelectElement include l’attributo value almeno a partire dalla Specifica di livello 1 Document Object Model (DOM), a partire dal 1998.

Tuttavia, come è spiegato in questa mailing list w3c , il problema era che le specifiche HTML4.01 erano vaghe:

È vero che HTML4.01 non specifica esplicitamente un attributo value per SELECT, ma sembra implicito:

  • ‘Menu’ è un tipo di controllo. ( HTML4.01 17.2.1 )

  • “Ogni controllo ha sia un valore iniziale che un valore corrente, entrambi sono stringhe di caratteri” ( HTML4.01 17.2 )

  • E SELECT può avere un attributo onchange che implica un valore. ( HTML4.01 17.6 )

Ma non si fa menzione di ciò che rappresenta il valore, né di ciò che potrebbero essere i valori iniziali o di default.

Tuttavia, controllando IE5 e Mozilla, il valore di SELECT restituisce effettivamente una stringa corrispondente al valore OPTION attualmente selezionata.

(…) Probabilmente non sarebbe un problema se HTML4.01 fosse stato più esplicito.

Questo è stato risolto nelle seguenti definizioni.

Puoi vederlo definito qui:

  • HTMLSelectElement in DOM Level 1 , W3C Recommendation, 01 ottobre 1998

    Il valore di controllo del modulo corrente.

  • HTMLSelectElement in DOM Level 2 , W3C Recommendation, 09 gennaio 2003

    Il valore di controllo del modulo corrente (ovvero il valore dell’opzione attualmente selezionata), se sono selezionate più opzioni questo è il valore della prima opzione selezionata.

  • HTMLSelectElement in HTML5, Raccomandazione Candidato W3C

    L’attributo value IDL, al momento di ottenere, deve restituire il valore del primo elemento option nell’elenco di opzioni nell’ordine dell’albero che ha la sua selezione impostata su true, se presente. Se non ce n’è uno, allora deve restituire la stringa vuota.

Quindi penso che sia sicuro da usare.

Alcuni vecchi thread (~ 2005) dal newsgroup comp.lang.javascript , così come le loro FAQ [1] , menzionano che .value accesso .value non era supportato in Netscape Navigator 4 (ovvero pre-2000), e alcuni altri dispositivi mobili e desktop browser che erano considerati “vecchi” anche in quel momento.

Conclusione (supportata dagli estratti delle specifiche di DOM di @ Oriol): è totalmente sicuro da usare oggi.