Код не работает, это отдельный файл js, но он работает, когда я помещаю его в <script>

Итак, как говорится в заголовке, я хочу создать загрузчик, но скрипт работает, когда я помещаю его в файл html, но не работаю, когда я помещаю его в свой отдельный файл js.

Вот сценарий:

var loader = document.getElementById("ld");
    window.addEventListener("load", function()
    {
      loader.style.display = "none";
    })

и вот html:

<!DOCTYPE html>
<html lang = "en">
<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1">
<meta name = "author" content = "Bilal el Badaoui">
<meta name = "description" content = "The best clothes for the best price">
<link rel = "stylesheet" href = "style.css">
<script src = "script.js"></script>
<link href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel = "stylesheet">
<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<head>
    <meta http-equiv = "X-UA-Compatible" content = "IE=edge">
    <title>S&B Clothes</title>
    <link rel = "icon" type = "image/x-icon" href = "logo/icons8-needle-96.png">
</head>

<body id = "body">

<div class = "loader" id = "ld"></div>

</body>

Not working плохое описание. Что говорит консоль инструментов Dev? Type reference Error: Element is null? Добавьте атрибут defer к скрипту ag и посмотрите, исправит ли он это. PS: Вы, наверное, тоже хотите DOMContentLoaded, а не load как событие.
tacoshy 07.02.2023 16:40

Ссылка: Окно: событие DOMContentLoaded

Yogi 07.02.2023 16:45

я получаю «Uncaught TypeError TypeError: невозможно прочитать свойства null (чтение« стиля »)»

Bilal El Badaoui 07.02.2023 16:53

вы можете попробовать включить свой скрипт в конец тела

ZIASH 07.02.2023 16:54
Поведение ключевого слова "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) для оценки ваших знаний,...
2
4
84
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

В этом блоке проблема. Измените этот блок:

var loader = document.getElementById("ld");
    window.addEventListener("load", function()
    {
      loader.style.display = "none";
    })

к:

window.addEventListener("load", function()
{
  var loader = document.getElementById("ld");
  loader.style.display = "none";
})

Почему? Вы включаете свой js-скрипт в заголовок своего дома. Затем вам нужно подождать, если весь дом загружен. Потому что ваш скрипт начнет выбирать незагруженный элемент. По этой причине вы должны поместить свой код в событие загрузки.

Привет @Квентин! Можете ли вы объяснить, почему, пожалуйста? Спасибо :-)

Maik Lowrey 07.02.2023 17:05

вы должны использовать DOMContentLoaded не загружать как событие. Также изменения стиля в 2023 году должны производиться на уровне CSS.

tacoshy 15.02.2023 16:31

Если у вас возникли проблемы со связью с вашим внешним js-файлом, можете ли вы просто попробовать добавить строку ниже, чтобы проверить это? И можете ли вы также поделиться, находится ли файл js в том же каталоге, что и ваш файл html, или в другом каталоге? Если оба файла находятся в одном каталоге, вы должны получить сообщение «hello world».

alert('hello world')
var loader = document.getElementById("ld");
    window.addEventListener("load", function()
    {
      loader.style.display = "none";
    })

Код читается сверху вниз, поэтому сначала он читает скрипт и не видит id "ld", после скрипт читает тело и теперь видит id. Таким образом, вы должны поместить script после div, чтобы сначала прочитать его, а затем script может видеть элементы тела. Поэтому поместите скрипт в конец тела.

    <!DOCTYPE html>
<html lang = "en">
<meta charset = "utf-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1">
<meta name = "author" content = "Bilal el Badaoui">
<meta name = "description" content = "The best clothes for the best price">
<link rel = "stylesheet" href = "style.css">
<link href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel = "stylesheet">
<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<head>
    <meta http-equiv = "X-UA-Compatible" content = "IE=edge">
    <title>S&B Clothes</title>
    <link rel = "icon" type = "image/x-icon" href = "logo/icons8-needle-96.png">
</head>

<body id = "body">

<div class = "loader" id = "ld"></div>

<script src = "script.js"></script>
</body>

P.S. Извините за мой английский)

Это может решить проблему, но это самый неэффективный метод (без асинхронной загрузки).

tacoshy 15.02.2023 16:30

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