Получить выбранный вариант из набора полей
Это причиняет мне много горя, и я почти уверен, что это что-то глупое.
Почему это возвращение не определено вместо "Тест"?
Смотрите JSFiddle
<fieldset class="fieldset">
<select class="list">
<option selected="selected">Test</option>
</select>
</fieldset>
<script type="text/javascript">
alert($('.fieldset').children('select.list option:selected').val());
</script>
4 ответа
Вы должны были использовать find
вместо children
,
children
дает вам непосредственные потомки вашего селектора, то есть только один уровень вниз. find
ищет всех потомков. В противном случае вы были на месте!
(Имейте в виду, что если у вас есть более одного select
в вашем fieldset
, ваш текущий селектор получит их все сразу. Если это не то, что вы хотите, используйте то, что получает select
вы хотите конкретно; в вашем примере это будет $('.list').children('select.list option:selected').val()
select.list
прямое дитя .fieldset
но option
не является.
children
селектор должен указать селектор, соответствующий прямым потомкам .fieldset
какие варианты не являются, поскольку они являются потомками списка вместо этого.
Метод children не является рекурсивным и ищет совпадения только у прямых потомков / потомков, а не у потомков потомков.
Вы можете сделать select.list
часть выбора вашего начального selector
и тогда дети будут options
хорошо. Похоже на это:
alert($('.fieldset select.list').children('option:selected').val());
DEMO - исправленный селектор
Кроме того, вы также можете избежать использования метода children, например:
alert($('.fieldset select.list>option:selected').val());
Или вот так:
alert($('select.list>option:selected', '.fieldset').val());
Есть много способов сделать это с курса.