Получить выбранный вариант из набора полей

Это причиняет мне много горя, и я почти уверен, что это что-то глупое.

Почему это возвращение не определено вместо "Тест"?

Смотрите 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()

Попробуй это...

alert($('.fieldset').children().val());

Пример jsFiddle

Привет.

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());

Есть много способов сделать это с курса.

alert($('.fieldset select.list option:selected').val());
Другие вопросы по тегам