«Невозможно установить свойство «innerHTML» из неопределенного», но оно определено

Любопытная проблема: при использовании «.innerHTML» в объекте элемента JS я вижу ошибку «Невозможно установить свойство «innerHTML» из неопределенного», но оно не является неопределенным, поскольку я могу вывести его на консоль с помощью console.info (myElement) на линии раньше. Эта ошибка появляется при использовании Chrome и Firefox.

Кроме того, 'myElement.innerHTML("text")' работает даже с этой ошибкой, поэтому мой код работает (функционально), но мне интересно, может ли это создать некоторые непредвиденные проблемы, или это просто ошибка.

Код, который создает проблему/ошибку:

var errorList = event.target.getElementsByClassName("errorList")[0];
  console.info(errorList);    // successfully displays my intended element
  errorList.innerHTML = "";  // successfully clears the <ul class='errorList'>

Добавьте код, который повторяет проблему. Элемент, для которого вы пытаетесь установить innerHTML, в данный момент является undefined. Может опечатка, может еще не загрузилось и т.д. Но ваш вопрос не оставляет нам ничего, кроме "возможностей" и догадок. Мы можем помочь вам больше, если вы поможете нам больше :)

Tyler Roper 09.04.2019 18:11

Сам по себе этот код не выдаст никаких ошибок, если нет элемента с классом errorList, так что да, создайте jsFiddle, воспроизводящий проблему.

Isaac Vidrine 09.04.2019 18:12

html элемента?

D Mishra 09.04.2019 18:14

где код, который создает проблему?

Kevin Vandy 09.04.2019 18:15

В дополнение к моему предыдущему комментарию вопрос немного сбивает с толку. Вы говорите: «Это код, который создает ошибку», но затем комментарии к этому коду говорят, что он делает все «успешно»…?

Tyler Roper 09.04.2019 18:16

@MTL-VRN да, вот и все, ура ;)

Will Cowan 09.04.2019 18:20
Поведение ключевого слова "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) для оценки ваших знаний,...
0
6
228
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Даже если вы используете события, переключитесь на document при вызове getElementClassByName. event.target не всегда то, во что вы верите, попробуйте зарегистрировать это, чтобы выявить проблему.

Рабочий пример

document.getElementsByClassName("errorList")[0].addEventListener("click",
function(event){
var errorList = document.getElementsByClassName("errorList")[0];
  console.info(errorList);    // successfully displays my intended element
  errorList.innerHTML = "";  })
<ul class = "errorList">
  <li>test</li>
</ul>

Пример события (возвращает неопределенное значение в журнале)

document.getElementsByClassName("errorList")[0].addEventListener("click",
function(event){
var errorList = event.getElementsByClassName("errorList")[0];
  console.info(errorList);    // successfully displays my intended element
  errorList.innerHTML = "";  })
<ul class = "errorList">
  <li>test</li>
</ul>

Ваш код может запускаться несколько раз, возможно, при запуске или загрузке страницы. Если это произойдет, и в один из моментов его запуска элемент «errorList» не существует, ошибка может быть выдана в это время, даже если он успешно запустится позже.

Чтобы проверить это, я рекомендую добавить что-то вроде

console.info("TEST!");

перед

var errorList = event.target.getElementsByClassName("errorList")[0];

Если "ТЕСТ!" появляется несколько раз в консоли, вы будете знать, что он запущен более одного раза.

Вам нужно добавить событие загрузки, чтобы получить элемент, когда DOM будет готов.

function init(){
 var el = document.getElementById("btn");
 el.addEventListener('click',function(){ alert("Button clicked"); });
}


addEventListener('load',init);
<button id = "btn">Click</button>

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