Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 24.01.2019
Сообщений: 30

Inform.addEventListener is not a function

30.03.2019, 13:39. Показов 984. Ответов 6

Студворк — интернет-сервис помощи студентам
Пытаюсь работать с AJAX запросами,суть в том , что бы при нажатии на имя card-name пользователя появлялся скрытый блок div class="inform d-none" . Почему addEventListener не работает ( ошибка inform.addEventListener is not a function )?
JavaScript
1
2
3
4
5
6
7
8
9
10
class CustomHttp {
    get(url, callback) {
        const xhr = new XMLHttpRequest();
        xhr.open("GET", url);
        xhr.addEventListener("load", ()=> {
            callback(JSON.parse(xhr.responseText));
        });
        xhr.send();
    }
}
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
class PostUI{
    constructor() {
        this._container = document.querySelector(".posts-wrapper");
 
    }
    addPost(post){
        const template = PostUI._createTemplate(post);
 
        this._container.insertAdjacentHTML("beforeend",template)
    }
    showEmptyMsg() {
        this._container.insertAdjacentHTML("beforeend", PostUI._emtyContainerTemplate());
    }
 
    static _createTemplate({id,name,username,email}) {
        return `
        <div class="card mt-3">
            <div class="card-body">
                <h5 class="card-title">${id}</h5>
                <p class="card-name ">${name}</p>
                <div class="inform d-none"
 
                <p class="card-username">${username}</p>
                <p class="card-email">${email}</p>
                </div>
 
            </div>
        </div>
        `
    }
 
   static _emtyContainerTemplate() {
       return `<div class="alert alert-info">Нет постов</div>`
   }
 
}
 
 
function generatePosts(posts){
    const ui = new PostUI();
    if (!posts.length) return ui.showEmptyMsg();
    posts.forEach(post => ui.addPost(post));
}
 
const http = new CustomHttp();
const apiUrl = "https://jsonplaceholder.typicode.com";
http.get(`${apiUrl}/users`, (res)=> {
    generatePosts(res);
});
let inform1 = document.getElementsByClassName("card-name");
let inform2 = document.getElementsByClassName("container");
 
let inform = document.getElementsByClassName("inform");
 
function onClickHandler(e) {
    if (inform.className ="inform d-none") inform.className ="inform";
     else className ="inform d-none";
}
 
[U]inform.addEventListener("click", onClickHandler);
[/U]
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
 
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
</head>
<body>
    <div class="container posts-wrapper mt-5"></div>
    <!-- Scripts -->
    <script src="customHttp.js"></script>
    <script src="app.js"></script>
</body>
</html>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.03.2019, 13:39
Ответы с готовыми решениями:

addEventListener
Вопрос может показаться странным, просто я только начинаю вникать в js... Суть в следующем: Я создаю класс для работы с canvas. ...

Обработка addEventListener
Здравствуйте. Начинающий я человечек в js. Помогите, есть код &quot;use strict&quot;; var d = document, itemBox =...

Не работает addEventListener
Всем привет, вот такая вот проблема. На Windows 10 работает скрипт как нужно. На Linux Mint18 скрипт не работает. Основную...

6
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
30.03.2019, 14:10
Max3738, в строке 56 исправьте оператор присваивания (=) на опреатор точного сравнения (===) - это между делом, просто первое в глаза попалось ))
А еще по коллекции inform надо проходить циклом.
Поэтому участок
JavaScript
1
2
3
4
5
6
function onClickHandler(e) {
    if (inform.className === "inform d-none") inform.className ="inform";
     else className ="inform d-none";
}
 
inform.addEventListener("click", onClickHandler);
ошибка. Ведь у коллекций нет такого метода addEventListener, а вот у инстансов HTMLElement - есть.
1
0 / 0 / 0
Регистрация: 24.01.2019
Сообщений: 30
30.03.2019, 14:39  [ТС]
Вы бы не могли пожалуйста объяснить более подробно. В принципе, суть я понял на коллекцию не вешается слушатель, а на каждый отдельный ее элемент вешается, написал так
JavaScript
1
2
3
4
5
6
for ( i = 0 ; i < inform.length-1; i++){
    inform[i].addEventListener("click", ()=>{
        if (inform[i].className ==="inform d-none") inform[i].className ="inform";
     else inform[i].className ="inform d-none";
    });
}
но при нажатии на Имя пользователя ничего не происходит.Слушатель не срабатывает.Можете пожалуйста написать, как это должно выглядеть.И почему так не работает?
0
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
30.03.2019, 14:57
Max3738,
Цитата Сообщение от Max3738 Посмотреть сообщение
что бы при нажатии на имя card-name пользователя появлялся скрытый блок div class="inform d-none"
Внимательно изучите весь код, посмотрите изменения - https://codepen.io/qwerty_wasd/pen/KYPrRw
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
class CustomHttp {
    get(url, callback) {
        const xhr = new XMLHttpRequest();
        xhr.open("GET", url);
        xhr.addEventListener("load", ()=> {
            callback(JSON.parse(xhr.responseText));
        });
        xhr.send();
    }
}
 
class PostUI{
    constructor() {
        this._container = document.querySelector(".posts-wrapper");
 
    }
    addPost(post){
        const template = PostUI._createTemplate(post);
 
        this._container.insertAdjacentHTML("beforeend",template)
    }
    showEmptyMsg() {
        this._container.insertAdjacentHTML("beforeend", PostUI._emtyContainerTemplate());
    }
 
    static _createTemplate({id,name,username,email}) {
        return `
        <div class="card mt-3">
            <div class="card-body">
                <h5 class="card-title">${id}</h5>
                <p class="card-name ">${name}</p>
                <div class="inform d-none hide"
 
                <p class="card-username">${username}</p>
                <p class="card-email">${email}</p>
                </div>
 
            </div>
        </div>
        `
    }
 
   static _emtyContainerTemplate() {
       return `<div class="alert alert-info">Нет постов</div>`
   }
 
}
 
 
function generatePosts(posts){
    const ui = new PostUI();
    if (!posts.length) return ui.showEmptyMsg();
    posts.forEach(post => ui.addPost(post));
}
 
const http = new CustomHttp();
const apiUrl = "https://jsonplaceholder.typicode.com";
http.get(`${apiUrl}/users`, (res)=> {
    generatePosts(res);
});
  
document.querySelector(`.posts-wrapper`).addEventListener("click", e => {
  if (e.target.classList.contains(`card-name`)) e.target.nextElementSibling.classList.toggle(`hide`);
});
0
0 / 0 / 0
Регистрация: 24.01.2019
Сообщений: 30
30.03.2019, 15:02  [ТС]
спасибо огромное.Также ,Был бы благодарен если бы вы мне объяснили почему мой код не срабатывает
0
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
30.03.2019, 15:09
Max3738, потому Ваш код делает не то что Вы хотите.
Вы написали
Цитата Сообщение от Max3738 Посмотреть сообщение
что бы при нажатии на имя card-name пользователя появлялся скрытый блок div class="inform d-none"
А Ваш код делает -
JavaScript
1
2
3
4
5
6
for ( i = 0 ; i < inform.length-1; i++){ // для каждого элемента коллекции inform
    inform[i].addEventListener("click", ()=>{ // назначить обработчик по клику
        if (inform[i].className ==="inform d-none") inform[i].className ="inform"; // если атрибут класс  элемента коллекции абсолютно равен строке "inform d-none", то переписать имя класса на inform
     else inform[i].className ="inform d-none"; // иначе на inform d-none;
    });
}
Как нажать на элемент которого для указателя?
0
0 / 0 / 0
Регистрация: 24.01.2019
Сообщений: 30
30.03.2019, 15:40  [ТС]
JavaScript
1
2
3
4
5
6
for ( i = 0 ; i < inform.length-1; i++){ // для каждого элемента коллекции inform
    inform[i].addEventListener("click", ()=>{ // назначить обработчик по клику
        if (inform[i].className ==="inform d-none") inform[i].className ="inform"; // если атрибут класс  элемента коллекции абсолютно равен строке "inform d-none", то переписать имя класса на inform
     else inform[i].className ="inform d-none"; // иначе на inform d-none;
    });
}
d-none бутстраповский класс скрывающий див с информацией. По идеи у меня же атрибут класс элемента коллекции равен "inform d-none" и код должен сработать.Что-то я совсем запутался((( задумка у меня была что бы убирать этот самый d-none таким образом div class =""inform d-none"" становился бы "inform " тоесть - не скрытым. Простите ваш вопрос не понятен - "Как нажать на элемент которого для указателя?"

Добавлено через 22 минуты
Вот так вот заработало !
hide не нужен . Спасибо!!!!
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class PostUI{
    constructor() {
        this._container = document.querySelector(".posts-wrapper");
 
    }
    addPost(post){
        const template = PostUI._createTemplate(post);
 
        this._container.insertAdjacentHTML("beforeend",template)
    }
    showEmptyMsg() {
        this._container.insertAdjacentHTML("beforeend", PostUI._emtyContainerTemplate());
    }
 
    static _createTemplate({id,name,username,email}) {
        return `
        <div class="card mt-3">
            <div class="card-body">
                <h5 class="card-title">${id}</h5>
                <p class="card-name ">${name}</p>
                <div class="inform d-none">
                <p class="card-username">${username}</p>
                <p class="card-email">${email}</p>
                </div>
 
            </div>
        </div>
        `
    }
 
   static _emtyContainerTemplate() {
       return `<div class="alert alert-info">Нет постов</div>`
   }
 
}
 
 
function generatePosts(posts){
    const ui = new PostUI();
    if (!posts.length) return ui.showEmptyMsg();
    posts.forEach(post => ui.addPost(post));
}
 
const http = new CustomHttp();
const apiUrl = "https://jsonplaceholder.typicode.com";
http.get(`${apiUrl}/users`, (res)=> {
    generatePosts(res);
});
 
document.querySelector(".posts-wrapper").addEventListener("click", e => {
    if (e.target.classList.contains("card-name")) e.target.nextElementSibling.classList.toggle("d-none");
  });
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.03.2019, 15:40
Помогаю со студенческими работами здесь

Заменить addEventListener
Подскажите пожалуйста, чем заменить addEventListener что бы функция заработала? window.onload = function () { var a, b,...

Window.onload/addEventListener
Почему второй обработчик срабатывает сразу при загрузке страницы, а не при клике, как первый? Что нужно сделать, чтобы он срабатывал при...

Почему не срабатывает addEventListener?
Почему не срабатывает addEventListener? &lt;span class=&quot;btn btn-success fileinput-button&quot;&gt; &lt;i class=&quot;glyphicon...

Калькулятор через addEventListener
Пыталась сделать калькулятор, привожу код ниже. Хочу чтоб результат выводился в спан Результат. Проблема в том, что не знаю как сделать...

Не подключается addEventListener к элементам
Показывает &quot;triangles.forEach is not a function&quot; window.onload = { var field = document.getElementById('field'); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru