Javascript показывает мне TypeError, говоря, что моя переменная не определена

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

TypeError:sal[0] is undefined

Вот код javascript.

function sals(a,b,c,d,e,id)
{
    var sal = document.getElementsByClassName(id);
    sal[0].style.top=a;
    sal[0].style.left=b;
    sal[0].style.color=c;
    sal[0].style.fontsize=d;
    sal[0].style.zindex=e;
}

 sals('5%','50%','yellow','250px','20','GB');

Что я делаю не так?

Для дальнейшего справки, вот мой HTML-код

<html>
<head>
<title>Hello</title>
<link rel = "stylesheet" href = "main.css">
</head>
<body>
    <h1 class = "GB"> Holla</h1>
    <script src = "main.js"></script>
</body>
</html>

Отвечает ли это на ваш вопрос? Почему jQuery или метод DOM, такой как getElementById, не находит элемент?

Ivar 09.05.2022 22:58

Переместите свой скрипт после тега h1

Martinez 09.05.2022 23:04

Как сказал Мартинес, сценарий должен быть внизу тела. В противном случае скрипт загрузится и попытается найти элемент h1 до того, как он загрузится, что приведет к ошибке undefined.

htmlcat 09.05.2022 23:13

Похоже, ваш javascript, вероятно, запускается до полной загрузки DOM (структуры HTML), а перемещение скрипта после тега является одним из возможных решений, вы также можете запустить свою функцию при загрузке DOM. В ванильном javascript вы можете использовать document.addEventListener('DOMContentLoaded', function () { sal('5%','50%','yellow','250px','20','GB'); }, false);

Philippe 09.05.2022 23:14
Поведение ключевого слова "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
4
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Ваш JavaScript запускается до полной загрузки страницы (DOM).

Ваш JS действительно должен быть в голове вашего HTML

Самый простой способ убедиться, что DOM загружен до запуска вашего JS, — добавить «отложить» к тегу скрипта таким образом;

<head>
<title>Hello</title>
<link rel = "stylesheet" href = "main.css">
<script src = "main.js" defer></script>
</head>
<body>   
<h1 class = "GB"> Holla</h1>
</body>
</html>

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