2013-03-23 2 views
16

Интересно, возможно ли в Javascript получить выбранные в данный момент параметры в поле <select multiple>, используя API Selctors, а не «глупую» итерацию по всем параметрам.Получение выбранных опций с запросомSelectorAll

select.querySelectorAll('option[selected="selected"]') возвращает только те параметры, которые были отмечены как предварительно выбранные в исходном HTML, что не то, что я ищу. Есть идеи?

+0

Я думаю, что ваш единственный вариант, чтобы перебрать все 'option' элементы и отфильтруйте те, которые не выбраны. –

ответ

38

document.querySelectorAll('option:checked')

Работает даже на IE9;)

+0

[Должно работать с 9.0] (https://developer.mozilla.org/en-US/docs/CSS/:checked), Совместимость браузера внизу – zeroflagL

+0

Если jQuery - это опция, вы можете использовать ': selected' Селектор – zeroflagL

+0

Жаль, но это хорошо знать. – zeroflagL

1

Я также испытал вашу проблему, я чувствую, что это связано с тем, что JavaScript не распознает изменения в DOM.

Вот решение:

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

Спасибо, это в основном то, что я делаю уже. –

+0

JS распознает эти изменения в DOM. Проблема в том, что свойство 'selected' DOM не является сериализуемым. Атрибут 'selected' соответствует свойству' defaultSelected' DOM, поэтому запрос для атрибута, как и в '[selected]', будет возвращать элементы, у которых свойство 'defaultSelected' DOM установлено на' true'. –

 Смежные вопросы

  • Нет связанных вопросов^_^