Javascript Modal с динамическим XML-контентом

У меня есть XML-БД с фильмами. К каждому фильму прилагается картинка. При нажатии на изображение открывается модальное окно, в котором вы можете увидеть информацию о фильме. С помощью следующего кода я могу перебирать все мои изображения, в том числе кнопки.

btn.forEach(element => {
 element.addEventListener("click", () => {                              
  modal.style.display = "block";                    
 } );
} );

Проблема в том, что при этом все время открывается одно и то же модальное окно, то есть содержимое не меняется динамически, в зависимости от фильма, который я нажимаю. Я пробовал следующее

btn.forEach(element => {
 element.addEventListener("click", () => {
  modal.forEach(item => {
   item.style.display = "block";
  });
 });
});

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

Было бы полезно помочь, если бы предоставили образец сгенерированной информации html, и как инициализируются переменные btn и modal?

Wazeed 05.04.2021 21:58
Поведение ключевого слова "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) для оценки ваших знаний,...
0
1
26
1

Ответы 1

Я бы рекомендовал не использовать здесь стрелочные функции из-за контекста или, так сказать, привязки `` это '', лучший способ - использовать простую старую функцию и некоторый обход DOM

Дело в том, что вы не предоставили код для кстати, поэтому я не знаю, как вы выбираете все кнопки, но я бы сделал это так:

Array.from(document.getElementsByClassName('btn')).map(btn => btn.addEventListener('click', function(){
  const theContainer = this.closest('.container')
  theContainer.getElementsByClassName('modal')[0].classList.add('show')
  theContainer.getElementsByClassName('close')[0].onclick = function(){
    this.closest('.modal').classList.toggle('show')
  }
}))
.modal {
  display: none;
}
.show {
  display: block;
  border: 1px solid red;
}
<div class='container'>
  <div class='modal'>
    <p> modal </p>
    <button class='close'>X</button>
  </div>
  <button class='btn'>0</button>
</div>
<div class='container'>
  <div class='modal'>
    <p> modal 1</p>
    <button class='close'>X</button>
  </div>
  <button class='btn'>1</button>
</div>
<div class='container'>
  <div class='modal'>
    <p> modal 2</p>
    <button class='close'>X</button>
  </div>
  <button class='btn'>2</button>
</div>
<div class='container'>
  <div class='modal'>
    <p> modal 3</p>
    <button class='close'>X</button>
  </div>
  <button class='btn'>3</button>
</div>

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