Почему хромированные консоли jquery добавили значение для выбора параметров еще до того, как я назначил значение

У меня есть вход выбора, где я добавляю еще один вариант через jQuery, Шаги, которые я здесь выполняю, - это создание элемента option методом createElement документов, затем добавление некоторого количества innerHTML и, наконец, установка value.

Проблема заключается на втором шаге, когда я только что создал элемент и добавил только innerHTML (еще не добавлял значение), хром объединяет элемент с value, который я добавил на следующем шаге.

Как хром это делает? и почему ?

Проверьте фрагмент кода ниже:

Примечание: Фрагмент здесь показывает это правильно, но браузер хромне, когда я запускаю код из отдельного файла .html. Однако Fire Fox показывает правильный вывод.

$(document).ready(function() {
  $('#addSteve').on('click', function() {
    var newVal = document.createElement('option');
    newVal.text = 'Steve';
    console.info(newVal); // didn't assign a value 'hello', still consoles it;
    newVal.value = 'Hello';
    console.info(newVal); // supposed to console the value here only;

    $('#wrapper').find('select').append(newVal);
  });
});
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id = "wrapper">
  <select>
    <option value = "John" selected>John</option>
    <option value = "Nick">Nick</option>
    <option value = "Gomez">Gomez</option>
  </select>
</div>

<button type = "button" id = "addSteve">Add Steve</button>

Пожалуйста, проверьте Note в конце моего вопроса, фрагмент работает здесь, но не для отдельного файла .html

Towkir 13.11.2018 06:29

то на этот вопрос невозможно ответить, потому что демонстрация не показывает, в чем проблема

guradio 13.11.2018 06:30
option не имеет HTML, он может содержать только простой текст и экранированные символы HTML. Хотя некоторые браузеры показывают установленный innerHTML как текст опции, вы не можете полагаться, что все браузеры правильно отображают недопустимую разметку.
Teemu 13.11.2018 06:30

@ Teemu как тогда текст в option поместить?

Towkir 13.11.2018 06:31
option.text - это свойство, которое нужно установить.
Teemu 13.11.2018 06:32

@guradio есть много вопросов, которые нельзя здесь продемонстрировать, потому что фрагмент кода работает в iframe (я полагаю), но в отдельном файле .html он явно работает. Если хотите, могу ссылку на какой-нибудь gist. Хотите, чтобы я ? Спасибо

Towkir 13.11.2018 06:33

Вы видите маленький синий значок i в консоли Chrome? Если вы его видите, наведите указатель мыши на значок и прочтите объяснение.

Teemu 13.11.2018 06:34

@Teemu нет, я не вижу такого значка, я обновил свой локальный файл .html с помощью свойства newVal.text, но результат тот же

Towkir 13.11.2018 06:36

См. stackoverflow.com/a/23429304/1169519

Teemu 13.11.2018 06:37

@Teemu, который немного объясняет причину, но есть ли способ получить синхронный / ожидаемый результат?

Towkir 13.11.2018 06:40

В ответе zzzzBov упоминается: "регистрировать отдельные значения".

Teemu 13.11.2018 06:44

Другое объяснение здесь

Louys Patrice Bessette 13.11.2018 07:06
Поведение ключевого слова "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
12
38
1

Ответы 1

Трассировка выводится в Chrome примерно за 8 мс (по крайней мере, на моем компьютере ваш может быть быстрее / медленнее) и поэтому отражает значение переменной после этих миллисекунд. Видеть:

$(document).ready(function() {
  $('#addSteve').on('click', function() {
    var newVal = document.createElement('option');
    newVal.text = 'Steve';
    console.info(newVal); 
    setTimeout(function(){
      newVal.value = 'Hello';
      console.info(newVal); 
    }, 8); // replace with a lower number see the value traced in the earlier console log.

    $('#wrapper').find('select').append(newVal);
  });
});

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