Как получить доступ к добавленным элементам с помощью php из javascript

Я работаю над небольшим проектом, и это мой первый, так что мне приходится преодолевать некоторые трудности. Я создаю динамический список для отфильтрованного поиска, и проблема в том, что я пытаюсь добавить элементы с помощью php, и я хочу, чтобы они изменяли видимость onclick, и для этого я использую код css, который полностью функционален, но проблема связана с javascript, который говорит мне:

script.js:4 Uncaught TypeError: Cannot read property 'classList' of null at visibilityToggle (script.js:4) at HTMLDivElement.onclick (afficherDept.php:4)

js_Code:

function visibilityToggle(id) {
    var section = document.getElementById(id);
    section.classList().toggle("showen");
}

и это PHP-код для добавления элементов: --- $ sectionID управляется циклом

echo '<div onclick = "visibilityToggle('.$sectionID.');"id='.$id.'>'.'ID 
     '.$dept["id"].'. NOM:'. $dept["nom"].'.CHEF:'.$dept["chef"].'</div>';

echo '<section class = "hidden" id=' . $sectionID . '>';

результат в HTML

ну, visibilityToggle('.$sectionID.'); должен быть visibilityToggle(\''.$sectionID.'\');

wayneOS 07.04.2018 13:21

Также имейте в виду, что JavaScript и PHP никак не связаны друг с другом. Все, что видит JavaScript, - это результирующий HTML; ко времени появления JS PHP уже давно не существует. JS не знает (и не заботится), был ли HTML сгенерирован статически, PHP или каким-либо другим способом.

Mitya 07.04.2018 13:22

Кроме того, classList - это свойство, доступное только для чтения, а не функция. Таким образом, не следует использовать () после идентификатора.

Pierre 07.04.2018 13:35
Поведение ключевого слова "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
3
49
3

Ответы 3

Нет смысла вызывать функцию с onclick из элемента, а затем использовать document.getElementById для повторного поиска того же элемента ...

Вместо этого я бы добавил класс к вашим div на PHP и использовал бы javascript для добавления обработчика кликов. Таким образом, вы знаете, кто вызвал обработчик, и можете напрямую переключать класс CSS. (примечание: не тестировал это, но я надеюсь, что идея понятна)

PHP

echo '<div class = "clickablediv">simple example</div>';

JAVASCRIPT

let clickableDivs = document.getElementsByClassname("clickablediv")
for(let d of clickableDivs){
    d.addEventListener("click", visibilityToggle)
}
function visibilityToggle(e) {
    e.target.classList().toggle("showen");
}

Причина указанной ошибки - неправильная отрисовка html-разметки из вашего php-кода.

Вам нужно заключить в кавычки аргумент, переданный функции visibilityToggle.

'<div onclick = "visibilityToggle(\''. $sectionID. '\')"'

Затем classList - это объект DOMTokenList, а не функция.

Итак, вы должны получить доступ к свойству toggle следующим образом:

section.classList.toggle("showen");

thanks for all your answers. Я исправил проблему. В моей js-функции visibilityToggle идентификатором аргумента был элемент html, а не строка. я не знаю почему, но это работает

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