Ответ 1
var hasValue = ($('select > [selected]').length > 0);
В качестве альтернативы,
var hasValue = $('select').has('[selected]');
Я googled и попробовал несколько способов сделать это, но пока никто не работает для меня. То, что я ищу, довольно просто: я хочу узнать, имеет ли выпадающее меню выбранное значение или нет. Проблема в том, что selectedIndex,: selected, val() и т.д. Возвращают результаты для следующего случая:
<select>
<option value="123">123</option>
<option value="234">234</option>
</select>
Очевидно, браузер отобразит это раскрывающееся меню с выбранным параметром 123, но он будет выбран только потому, что нет других параметров, в действительности это выпадающее меню не имеет выбранного значения, потому что не существует свойства "selected". Поэтому в основном я пытаюсь найти, как рассказать обо всем вышеперечисленном выпадающем списке из этого
<select>
<option selected value="123">123</option>
<option value="234">234</option>
</select>
var hasValue = ($('select > [selected]').length > 0);
В качестве альтернативы,
var hasValue = $('select').has('[selected]');
Быстрое решение:
<select>
<option selected></option>
<option value="123">123</option>
<option value="234">234</option>
</select>
Затем посмотрите, есть ли у вас .val()
Утвержденный ответ, похоже, не работает для меня.
Вот как я это делаю, чтобы проверить, выбраны ли все опции выбора:
if($('select option:selected').length > 0) {
/* Do your stuff here */
}
Насколько я могу судить, функционального различия между двумя примерами нет. По сути, браузер автоматически выбирает первый option
.
См., например, результат
$('option:selected')
в вашем первом примере.
Если вы действительно хотите предотвратить это, у вас есть два варианта. Первый заключается в том, чтобы ввести новый пустой элемент в select
, за ответ Джейсона. Другой вариант - отменить выбор автоматически выбранного значения:
$(document).load(function(){
$('option:selected').attr('selected', false);
});
Это очищает выбор. Таким образом, любой результат $('select').val()
, который не является пустой строкой, будет изменяться пользователем.
Это должно работать:
if($('#mySelect').find('[defaultSelected]').size()>0){/*do your stuff*/}