TypeError: document.getElementById (...) имеет значение null Django + JS

У меня ошибка при выполнении следующего кода:

var toppings = ['Zucchini', 'Fresh Garlic', 'Black Olives', 'Anchovies',
  'Barbecue Chicken', 'Artichoke', 'Spinach', 'Ham', 'Sausage', 'Mushrooms'];

var appended = 0;
var maxAppended = 3;

document.getElementById('add').onclick = () => {
  appended+=1;
  if (appended <= maxAppended){
  const topping = document.createElement('select', {
    'name': 'Topping',
    'class': 'form-control'
  });
  list.appendChild(topping);
  toppings.forEach(function(item, i, arr) {
    const ch_topping = document.createElement('option');
    ch_topping.innerHTML += item;
    topping.appendChild(ch_topping);
  });
  }
  else {
      alert('You should stop');
  }
};

page1.html:

 <div class = "form-group" id='add_one'>
    <br>
    <h5>You can add up to 3 toppings to your pizza!</h5>
    <ol id = "list"></ol>
    <button class = "btn btn-primary" id = "add" type = "submit">Add topping</button>
  </div>

Этот код не работает со следующей ошибкой:

TypeError: document.getElementById(...) is null

Я включаю JavaScript в свой файл base.html, а page1.html расширяет этот файл.

Мой base.html<head>:

<title>{% block title %}{% endblock %}</title>
    <link rel = "stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css" integrity = "sha384-Smlep5jCw/wG7hdkwQ/Z5nLIefveQRIY9nfy6xoR1uRYBtpZgI6339F5dgvm/e9B" crossorigin = "anonymous">
    <script src = "{% static 'js/main.js' %}"></script>

window.onload() не помог

jQuery's $(document).ready() не помогло

Поведение ключевого слова "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) для оценки ваших знаний,...
3
0
762
3

Ответы 3

Ваш файл javascript запущен до того, как кнопка существует в DOM, поэтому он не может ее найти

оберните свой код с помощью window.onload

всякий раз, когда вы обращаетесь к элементу DOM, он уже должен быть отрисован

странно, путь к js файлу, который вы вызываете, правильный?

Henrique Viana 30.08.2018 23:43

да, я тестировал его с помощью функции оповещения, и все работает отлично

Desiigner 30.08.2018 23:44

Выполните проверку null

let button = document.getElementById('id');

if (typeof button !== 'undefined' && button !== null) {
  button.onclick = () => { /* Do your stuff */ };
}

затем он возвращает 'button is null'

Desiigner 30.08.2018 23:39

попробуйте выполнить проверку null, как я сделал в отредактированном ответе @Desiigner

fortunee 30.08.2018 23:50

Я пробовал это, ошибка исчезла, но тоже ничего не происходит. Он просто перезагружает страницу каждый раз, когда я нажимаю кнопку.

Desiigner 30.08.2018 23:57

type = "submit" кнопки должен быть удален, если вы хотите добавить слушателя.

Думаю, я не совсем понимаю, что ты имеешь в виду

Desiigner 31.08.2018 00:01

В вашем HTML <button class = "btn btn-primary" id = "add" type = "submit">Add topping</button> удалите атрибут type.

Thevs 01.09.2018 07:42

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