#php
Вопрос:
Этот код заполнит таблицу, которую мы найдем. Проблема в том, что когда я могу показать динамическое всплывающее окно, оно работает только в первой строке, но в любом случае не работает
<tr>
<td><img src="../mysql/img/<?php echo $fila['imagen'];?>" class="logoempresa" alt="Logo empresa"></td>
<?php $fila['id'];?>
<td><?php echo $fila['empresa'];?></td>
<td><?php echo $fila['puesto'];?></td>
<td><?php echo $fila['jornada'];?></td>
<td><?php echo $fila['salario'];?></td>
<td><?php echo $fila['zona'];?></td>
<td>
<div class="popup-flex">
<button id="popup-btn">Click Me</button>
</div>
<div id="popup-wrapper" class="popup-container">
<div class="popup-content">
<span id="close">amp;times;</span>
<p class="observaciones"><?php echo $fila['observaciones'];?></p>
</div>
</div>
</td>
Комментарии:
1. не используйте
ID
атрибуты — они должны быть уникальными. Используйтеevent
иevent.target
для идентификации любых элементов, которые вызываютpopup
и используйте это для создания всплывающего окна. Если вы можете добавить часть отрисованного кода ( т. Е. представление исходного кода ) таблицы — не обязательно весь — будет легче проиллюстрировать суть2. Из
event.target
вы можете перемещаться по DOM, используя селекторы родителей/детей/братьев и сестер ( в зависимости от того, куда вам нужно перейти ) — когда вы найдете соответствующийpopup-wrapper
элемент, откройте всплывающее окно
Ответ №1:
пробовать
<button id="<?= $fila['id'];?> " class="popup-btn">Click Me</button>
jquery
$('.popup-btn').on('click', function(e){
e.preventDefault()
let id = $(this).attr('id')
//do magic
})
Ответ №2:
Используя ванильный Javascript, вы можете попробовать сделать вот так. Удалите атрибуты идентификатора или преобразуйте dataset
их в такие версии, как data-id="popup-wrapper"
вместо id="popup-wrapper"
, и используйте click
событие, вызванное кнопкой, чтобы найти этот элемент в дереве DOM. С этого момента вы можете перемещаться up
по дереву DOM и еще раз запрашивать, чтобы найти всплывающее окно. Как только вы определили всплывающее окно — откройте его или сделайте что-нибудь.. здесь я просто переключаю имя класса.
Все приведенные ниже теги PHP были удалены просто для облегчения работы с фрагментом/демонстрацией…
const clickhandler=function(e){
let popup=this.parentNode.parentNode.querySelector('[data-id="popup-wrapper"]');
popup.classList.toggle('popped');
/* Open the popup... sing and dance! */
};
document.querySelectorAll('.popup-flex > [data-id="popup-btn"]').forEach( bttn=>bttn.addEventListener('click',clickhandler))
.popped{border:2px solid red;}
td{border:1px solid grey}
<table>
<tr>
<td><img src="//placekitten.com/100/100" class="logoempresa" alt="Logo empresa"></td>
<td>$fila['empresa']</td>
<td>$fila['puesto']</td>
<td>$fila['jornada']</td>
<td>$fila['salario']</td>
<td>$fila['zona']</td>
<td>
<div class="popup-flex">
<button data-id="popup-btn">Click Me</button>
</div>
<div data-id="popup-wrapper" class="popup-container">
<div class="popup-content">
<span data-id="close">amp;times;</span>
<p class="observaciones">$fila['observaciones']</p>
</div>
</div>
</td>
</tr>
<tr>
<td><img src="//placekitten.com/100/100" class="logoempresa" alt="Logo empresa"></td>
<td>$fila['empresa']</td>
<td>$fila['puesto']</td>
<td>$fila['jornada']</td>
<td>$fila['salario']</td>
<td>$fila['zona']</td>
<td>
<div class="popup-flex">
<button data-id="popup-btn">Click Me</button>
</div>
<div data-id="popup-wrapper" class="popup-container">
<div class="popup-content">
<span data-id="close">amp;times;</span>
<p class="observaciones">$fila['observaciones']</p>
</div>
</div>
</td>
</tr>
<tr>
<td><img src="//placekitten.com/100/100" class="logoempresa" alt="Logo empresa"></td>
<td>$fila['empresa']</td>
<td>$fila['puesto']</td>
<td>$fila['jornada']</td>
<td>$fila['salario']</td>
<td>$fila['zona']</td>
<td>
<div class="popup-flex">
<button data-id="popup-btn">Click Me</button>
</div>
<div data-id="popup-wrapper" class="popup-container">
<div class="popup-content">
<span data-id="close">amp;times;</span>
<p class="observaciones">$fila['observaciones']</p>
</div>
</div>
</td>
</tr>
</table>