Какое значение имеет выбор, когда выбран отключенный параметр?

Я использую следующий 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» в приведенном выше примере)?

val() возвращает null, потому что отключенные элементы формы не передают свои значения в форму. См. этот старый отчет об ошибке в jQuery относительно поведения.
Heretic Monkey 17.12.2018 21:33

Зачем вам когда-либо использовать selected и disabled в одном варианте? Не имеет смысла

charlietfl 17.12.2018 22:25

@fpierrat Вот jsfiddle. jsfiddle.net/RachGal/r3fy8k6u

Rachel Gallen 17.12.2018 22:36

@charlietti: Кажется, я не единственный, кому имеет смысл: stackoverflow.com/a/5859221/3872061, stackoverflow.com/a/22033973/3872061, markus.oberlehner.net/blog/… и так далее ...

fpierrat 17.12.2018 23:06

@Heretic Monkey очень интересный отчет, спасибо.

fpierrat 17.12.2018 23:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
2 478
1

Ответы 1

Вы не можете выбрать отключенный параметр, поэтому значение (независимо от того, что вы его установили) всегда будет возвращать 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 ;-)

fpierrat 17.12.2018 23:25

Хотя я не могу найти никаких документов по ожидаемому поведению, я наткнулся на ТАК вопрос, чтобы получить значение отключенной опции ... $('select[name = "town"] option[disabled]:selected').val(); Это было бы более подходящим для того, что вы хотели.

Studocwho 17.12.2018 23:55

может быть немного более подходящим ... но все же я просто хочу быть уверенным каково ожидаемое поведение$('select').val(). Лучшим ответом на данный момент является комментарий Heretic Monkey, в котором цитируется отчет, в котором, кажется, утверждается, что делает возвращает null, начиная с JQuery 1.8.3. Я бы предпочел основывать свой выбор на официально задокументированном поведении.

fpierrat 18.12.2018 11:23

Другие вопросы по теме