.val () не возвращает правильное значение

У меня есть следующий код, который выполняется при изменении для окна выбора:

 $('#reg-phone-type').change( function() {
      console.dir($(this));
      console.log("$(this).val():" + $(this).val());
    if( $(this).val == 'work' ) {
     //do one thing
    } else {
     //do something else
    }
  });

Когда я распечатываю console.dir ($ (this)); Я вижу, что выбранный параметр установлен (на моем примере экрана) для «работы» (ярлык является правильным, но фактический значение опции ниже, поэтому я знаю, что я не имею дело с проблемой).

enter image description here

Вот HTML из Firebug после изменения поля выбора (по умолчанию «home»):

enter image description here


Таким образом, вы можете видеть, что опция выбрана правильно. Почему тогда, когда в моем jquery, только в одной строке позже, я вызываю console.log ("$ (this) .val ():" + $ (this) .val ()); , я получаю «дом» вместо «работы»? Я понял, что .val() возвращает значение выбранной опции в поле выбора, поэтому мне нужно «работать».

enter image description here

1
nl ja de
@Juhana - нет, никаких других полей с одинаковым идентификатором.
добавлено автор EmmyS, источник
@ j08691 - HTML динамически генерируется, поэтому я не могу опубликовать фактический HTML, только то, что отображается. Самый простой способ в этом случае - сделать снимок экрана Firebug.
добавлено автор EmmyS, источник
Не уверен, почему это так важно, так как это всего лишь крошечный отрезанный, но я разместил фактический отображаемый html.
добавлено автор EmmyS, источник
Кроме того, кто-то еще отправил ответ, который фактически устранил проблему, но он был удален, когда я был в середине комментирования. Не знаю, кто вы, но если вы его отложите, я приму это. Ответ состоял в том, чтобы использовать $ ('option: selected', this) .val() вместо простого $ (this) .val() .
добавлено автор EmmyS, источник
@ j08691 - значение устанавливается программным путем с помощью другого изменения.
добавлено автор EmmyS, источник
вы устанавливаете значение атрибута selectbox inline, это большая сделка, я думаю
добавлено автор A. Wolff, источник
Часть проблемы: $ (this) .val не эквивалентен $ (this) .val ()
добавлено автор davethegr8, источник
@ j08691 актуальный код находится в верхней части вопроса.
добавлено автор pjmorse, источник
Если на дисплее выбора установлено значение none, как изменяется значение? Кроме того, он работает нормально здесь jsfiddle.net/j08691/LuUNt
добавлено автор j08691, источник
@pjmorse - Я имел в виду HTML.
добавлено автор j08691, источник
Вы можете опубликовать созданный HTML ...
добавлено автор JJJ, источник
У вас есть какие-либо другие поля с одинаковым идентификатором?
добавлено автор JJJ, источник

1 ответы

Пытаться:

$('#reg-phone-type option:selected').val(); 

или

$('option:selected',this).val(); 
3
добавлено
Возможно, $ (this) .val() должен возвращать выбранный параметр, но в этом случае он не работает, а код ответа.
добавлено автор EmmyS, источник
Значение атрибута не является допустимым атрибутом W3C для выбранного элемента, это ваша проблема, я думаю. В любом случае, вы должны удалить его или продолжить поиск обхода каждый раз, когда классическое поведение не работает, вот вам
добавлено автор A. Wolff, источник
$ (this) .val() должен также возвращать выбранное значение параметра
добавлено автор A. Wolff, источник
Это связано с тем, что другой элемент меняет значение, в то время как ваш код выше нацелен на событие изменения элемента select, который фактически скрыт.
добавлено автор j08691, источник
Да, я подозреваю, что изменение ценности не делает это по книге. Было бы интересно увидеть код и/или рабочий пример.
добавлено автор JJJ, источник
Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda