И-ый клик по кнопкам - открывания модального окна?

как сделать и-ый клик по кнопке Допустим с нас на сайте будет 5 кнопок и 5 мочалок. Как сделать чтобы при клике на ЭТУ кнопку будет открываться ЭТА моделька

// Get the modal
var modal = document.getElementById("myModal");

// Get the button that opens the modal
var btn = document.getElementById("myBtn");

// Get the <span> element that closes the modal
var span = document.getElementsByClassName("close")[0];

// When the user clicks the button, open the modal 
btn.onclick = function() {
  modal.style.display = "block";
}

// When the user clicks on <span> (x), close the modal
span.onclick = function() {
  modal.style.display = "none";
}

// When the user clicks anywhere outside of the modal, close it
// window.onclick = function(event) {
//   if (event.target == modal) {
//     modal.style.display = "none";
//   }
// }
/* The Modal (background) */
.modal {
  display: none; /* Hidden by default */
  position: fixed; /* Stay in place */
  z-index: 1; /* Sit on top */
  padding-top: 100px; /* Location of the box */
  left: 0;
  top: 0;
  width: 100%; /* Full width */
  height: 100%; /* Full height */
  overflow: auto; /* Enable scroll if needed */
  background-color: rgb(0,0,0); /* Fallback color */
  background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
}

/* Modal Content */
.modal-content {
  background-color: #fefefe;
  margin: auto;
  padding: 20px;
  border: 1px solid #888;
  width: 80%;
}

/* The Close Button */
.close {
  color: #aaaaaa;
  float: right;
  font-size: 28px;
  font-weight: bold;
}

.close:hover,
.close:focus {
  color: #000;
  text-decoration: none;
  cursor: pointer;
}
<button class="btn_y" id="myBtn">Подробнее</button>

<div id="myModal" class="modal">
<!-- Modal content -->
<div class="modal-content">
  <span class="close">&times;</span>
  <p>Some text in the Modal..</p>
</div>
</div>


Ответы (1 шт):

Автор решения: meine

Простой пример связывания A с B, не стал писать доп. проверки (если одно открывается, то активное закрывается и тому подобное), делать какой-то дизайн, сама суть в коде ниже, но если сильно нужно - напишите в коментариях, напишу более подробно.

// Используем делегирование, лучший подход, ибо модальных окон может быть N-е количество
document.body.addEventListener('click', e => {
  // Проверяем, если клик был воспроизведён по элементу, который открывает "мочалку"
  const a = e.target.closest('.a');
  
  // Если клик был не по тому элементу, который нам нужен, то ничего не делаем
  if (!a) return;
  
  // Достаём атрибут [data-name] кликнутого элемента
  const name = a.getAttribute('data-name');
  
  // Ищём "мочалку" по полученному атрибуту [name]
  const b = document.body.querySelector(`.b[data-name="${name}"]`);
  
  // Если "мочалки" нет, то выкидаем ошибку, что её не существует на странице (если создаёте динамически, то, в принципе, это не нужно)
  if (!b)
    console.error(`The mochalka with name ${name} doesn't exist on the current page.`);
  
  // Проверяем, если "мочалка" показана, то скрываем, если нет, то открываем
  b.classList.contains('b--is-active')
    ? b.classList.remove('b--is-active')
    : b.classList.add('b--is-active');
})
.a, 
.b{
  border: 1px solid transparent;
  padding: 15px;
  display: inline-block;
}

.a { border-color: green; }

.b { 
  border-color: red; 
  display: none;
}

.b--is-active { display: block; }
<div class="a" data-name="1">Мочалка #1</div>
<div class="a" data-name="2">Мочалка #2</div>
<div class="a" data-name="3">Мочалка #3</div>

<div class="b" data-name="1">Мочалка #1 1</div>
<div class="b" data-name="2">Мочалка #2 2</div>
<div class="b" data-name="3">Мочалка #3 3</div>

→ Ссылка