На моем HTML-дисплее у меня есть таблица, показывающая некоторые имена загруженных файлов. и кнопку для удаления этого файла.
имена файлов загружаются динамически с помощью Php
<tbody>
<?php
foreach ($uploaded_files as $val) {
?>
<tr>
<th>
<a href="delete_this_file/<?php echo $val['id']; ?>" class="delete" data-confirm="Are you sure to delete this item?"><div class="btn btn-danger">Delete</div></a>
</th>
<th>
<?php echo $val['file_name']; ?>
</th>
</tr>
<?php
}
?>
</tbody>
и у меня есть функция javascript в разделе html head, вроде этого, чтобы подтвердить, действительно ли он хочет ее удалить.
$(document).ready(function() {
var deleteLink = document.querySelector('.delete');
deleteLink.addEventListener('click', function(event) {
event.preventDefault();
var choice = confirm(this.getAttribute('data-confirm'));
if (choice) {
window.location.href = this.getAttribute('href');
}
});
});
это хорошо работает только для первой кнопки, а для других кнопок она перенаправляется на эту ссылку href= "delete_this_file/
может кто-нибудь покажет мне ошибку в этом коде. Я не могу понять.
Большое спасибо
Взгляните на эту ссылку: https://api.jquery.com/on/
метод on
свяжет события с динамически создаваемыми объектами
$(document).on("click", ".delete", function() {
//your code here
});
Когда вы используете обычный addEventListener, он связывает его только с текущими соответствующими элементами в DOM, любой соответствующий элемент, созданный после этой точки, не будет привязан
<tbody>
<?php
foreach ($uploaded_files as $val) {
?>
<tr>
<th>
<a style="cursor:pointer" onclick="deleteFun(<?php echo $val['id']; ?>)" class="delete"><div class="btn btn-danger">Delete</div></a>
</th>
<th>
<?php echo $val['file_name']; ?>
</th>
</tr>
<?php
}
?>
</tbody>
<script>
function deleteFun(id){
var choice = confirm("Are you sure to delete this item?");
if (choice) {
window.location.href = "delete_this_file/"+id;
}
}
<script>
просто попробуйте это, более сведенный к минимуму ответ