Как перебрать динамические элементы при помощи javascript
При рендере страницы выводится разное количество динамически подгружаемых комментариев.
Если юзер в сессии и юзер является автором комментария, то отображается кнопка для редактирования комментария.
{% for u in user %}
{% if u.id == comment.user_id and u.id == session['user_id'] %}
<span role="button" class="change-button">Править</span>
{% endif %}
{% endfor %}
Комментарий отображается в тэге - р.
Так же, если юзер в сессии и является автором комментария, подгружается скрытая форма с текстовым input, которая появляется при нажатии на кнопку "Править".
{% for comment in comments_list %}
<p>{{ comment.text_comment }}</p>
{% for u in user %}
{% if u.id == comment.user_id and u.id == session['user_id'] %}
<form action="/update/comment/{{ comment.id }}" method="post" class="hidden-form d-none">
<input type="text" name="comment-change" value="{{ comment.text_comment }}">
<button type="submit">Изменить</button>
</form>
{% endif %}
{% endfor %}
Форма скрыта в css:
.d-none {
display: none;
}
Как при помощи javascript сделать так, что бы при нажатии на соответствующую кнопку "Править" отображалась соответствующая скрытая форма?
Я пытаюсь так:
$(document).ready(function() {
$(".change-button").on('click', function(e) {
$(".hidden-form").toggleClass("d-none")
})
})
В данном виде, если подгружается несколько комментариев автором которых является юзер, то при клике по любой кнопке "Править", отображаются сразу все скрытые формы.
Ответы (1 шт):
Вам надо ориентироваться на индекс:
$(document).ready(function() {
[...$('.change-button')].forEach((button, index) => {
$(button).on('click', () => {
$('.hidden-form').eq(index).toggleClass('d-none');
})
});
})
.hidden-form {
width: 50px;
height: 50px;
background-color: red;
}
.hidden-form.d-none {
background-color: green;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span role="button" class="change-button">Править 1</span>
<span role="button" class="change-button">Править 2</span>
<span role="button" class="change-button">Править 3</span>
<span role="button" class="change-button">Править 4</span>
<div class="hidden-form">Измени меня 1</div>
<div class="hidden-form">Измени меня 2</div>
<div class="hidden-form">Измени меня 3</div>
<div class="hidden-form">Измени меня 4</div>