Я использую следующий html, чтобы получить отключенную по умолчанию опцию «Выбрать город» в качестве своего рода заполнителя.
<select name = "town">
<option selected disabled value = "xx">-- Select a town --</option>
<option value = "1">Paris</option>
<option value = "2">London</option>
<option value = "3">Budapest</option>
</select>
Теперь я хотел бы проверить, был ли выбран какой-либо вариант пользователем или он все еще пуст.
Я думал, что проверка значения выбора с помощью jquery ($('select[name = "town"]').val();
) вернет значение «xx» .
Вместо этого .val()
возвращает ноль.
Я не нашел следов этого поведения в документе (http://api.jquery.com/val/).
Могу ли я полагаться на то, что .val()
вернет значение null, когда выбран отключенный параметр? Это где-нибудь задокументировано?
Или мне нужно проверить как нулевое, так и фактическое значение атрибута value
(«xx» в приведенном выше примере)?
Зачем вам когда-либо использовать selected
и disabled
в одном варианте? Не имеет смысла
@fpierrat Вот jsfiddle. jsfiddle.net/RachGal/r3fy8k6u
@charlietti: Кажется, я не единственный, кому имеет смысл: stackoverflow.com/a/5859221/3872061, stackoverflow.com/a/22033973/3872061, markus.oberlehner.net/blog/… и так далее ...
@Heretic Monkey очень интересный отчет, спасибо.
Вы не можете выбрать отключенный параметр, поэтому значение (независимо от того, что вы его установили) всегда будет возвращать null
. Это предполагаемое поведение.
Хотя в документации не указывается об отключенных параметрах, в нем говорится
if no options are selected, it returns an empty array; prior to jQuery 3.0, it returns null
Этого также можно ожидать от отключенных опций. Тем не менее, вы все еще можете проверить это!
Мы можем проверить, возвращает ли значение null
, используя оператор if. Следующий оператор if вернет истину, если значение неnull
if ($('select[name = "town"]').val() != null) {
console.info('Option selected.');
}
Если вы хотите проверить другие варианты, вы можете заменить != null
на == value
.
По сути, вы можете использовать это как несколько операторов if, else if, else.
В качестве альтернативы вы можете получить значение отключенной выбранной опции следующим образом:
$('select[name = "town"] option[disabled]:selected').val();
Благодаря этому ТАК ответ.
Спасибо за первую часть вашего ответа, хотя документы, которые вы цитируете, не касаются того случая, о котором я прошу. «Можно было ожидать» для меня недостаточно безопасно, как и некоторые тесты в некоторых браузерах. Я ищу документацию, показывающую, что такое поведение является ожидаемым и будет в любом браузере. Что касается второй части, я действительно не спрашивал, как тестировать на null ;-)
Хотя я не могу найти никаких документов по ожидаемому поведению, я наткнулся на ТАК вопрос, чтобы получить значение отключенной опции ... $('select[name = "town"] option[disabled]:selected').val();
Это было бы более подходящим для того, что вы хотели.
может быть немного более подходящим ... но все же я просто хочу быть уверенным каково ожидаемое поведение$('select').val()
. Лучшим ответом на данный момент является комментарий Heretic Monkey, в котором цитируется отчет, в котором, кажется, утверждается, что делает возвращает null, начиная с JQuery 1.8.3. Я бы предпочел основывать свой выбор на официально задокументированном поведении.
val()
возвращаетnull
, потому что отключенные элементы формы не передают свои значения в форму. См. этот старый отчет об ошибке в jQuery относительно поведения.