2013-03-23 10 views
16

Mi chiedo se sia possibile in Javascript ottenere le opzioni attualmente selezionate in un campo <select multiple> utilizzando l'API Selctors anziché una "stupida" iterazione su tutte le opzioni.Ottenere le opzioni selezionate con querySelectorAll

select.querySelectorAll('option[selected="selected"]') restituisce solo le opzioni contrassegnate come preselezionate nell'HTML originale, che non è quello che sto cercando. Qualche idea?

+0

penso che l'unica opzione è quella di iterare gli elementi su tutti 'option' e filtrare quelli che non sono selezionati. –

risposta

38

document.querySelectorAll('option:checked')

funziona anche su IE9;)

+0

[Dovrebbe funzionare con 9.0] (https://developer.mozilla.org/en-US/docs/CSS/:checked), compatibilità del browser nella parte inferiore – zeroflagL

+0

Se jQuery è un'opzione, è possibile utilizzare ': selected' Selettore – zeroflagL

+0

Peccato, ma buono a sapersi. – zeroflagL

1

Avevo anche esperienza del problema, ho la sensazione che abbia a che fare con JavaScript che non riconosce i cambiamenti nel DOM.

Ecco una soluzione:

jsFiddle

document.getElementById('test').onclick = function() { 
    var select = document.getElementById('select'); 
    var options = getSelectedOptions(select); 
    console.log(options); 
}; 

function getSelectedOptions(select) { 
    var result = []; 
    var options = select.getElementsByTagName('option'); 
    for (var i = 0; i < options.length; i++) { 
     if (options[i].selected) 
      result.push(options[i]); 
    }; 
    return result; 
} 
+0

Grazie, questo è fondamentalmente quello che sto facendo già. –

+0

JS riconosce queste modifiche al DOM. Il problema è che la proprietà DOM 'selected' non è serializzabile. L'attributo 'selected' corrisponde alla proprietà DOM' defaultSelected', quindi l'interrogazione per l'attributo come in '[selected]' restituirà elementi che hanno la proprietà DOM 'defaultSelected' impostata su' true'. –

Problemi correlati