Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

228
Visualizações
Vanilla Javascript: ¿Cómo agregar múltiples detectores de eventos a los botones que se crean dinámicamente con la misma clase en django?

Actualmente estoy trabajando en un proyecto 4 para CS50w - Red. Una de las tareas es agregar un botón de edición de publicaciones (para editar las publicaciones que creó el usuario que inició sesión (solo el propietario)), que hace esto asíncrono. Dado que para almacenar publicaciones estoy usando Django Models, estoy usando Django (y sus capacidades de plantilla) para mostrar todas las publicaciones a los usuarios también, y un botón de edición (si el usuario también es el creador de la publicación). Estoy mostrando todas las publicaciones en un div. Esto significa que el botón para editar también es parte de este div... lo que significa que solo puedo darle una sola clase o id para hacer referencia, pero no sé cómo distinguirlos y cómo saber cuál. (desde qué publicación) se hace clic para que pueda editar esa publicación y no la primera en la que aparece el JS en DOM ... De todos modos, aquí está el código:

HTML en Django:

 {% for post in posts %} <div class="post"> <a href="{% url 'users' post.user.username %}">{{ post.user }}</a> <p>{{ post.content }}</p> <p>{{ post.created }}</p> {% if user.is_authenticated and user == post.user %} <button class="edit_post_button">Edit Post</button> {% endif %} </div> <div class="edit_post" style="display: none;"> <a href="{% url 'users' post.user.username %}">{{ post.user }}</a> <textarea rows=3 cols=20>{{ post.content }}</textarea> <p>{{ post.created }}</p> <button class="save_edit_post_button">Save</button> </div> {% endfor %}

y aquí está el pequeño JS que escribí que no funciona (estoy empezando a aprenderlo y me gustaría terminar este proyecto con vainilla JS):

 document.addEventListener('DOMContentLoaded', function() { document.querySelectorAll('.edit_post_button').forEach(edit_post_button => { edit_post_button.addEventListener('click', edit_post); }) }); function edit_post(event) { document.querySelector('.post').style.display = 'none'; document.querySelector('edit_post').style.display = 'block'; }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

La delegación es la respuesta

Tenga en cuenta que olvidó un punto en document.querySelector('edit_post')

 window.addEventListener('load', function() { document.getElementById('postContainer').addEventListener('click', function(e) { const tgt = e.target.closest('.edit_post_button') if (tgt) { const postDiv = tgt.closest('.postDiv') postDiv.querySelector('.post').hidden = true postDiv.querySelector('.edit_post').hidden = false console.log(tgt.dataset.id); // if needed } }) })
 <div id="postContainer"> <div class="postDiv"> <div class="post"> <a href="User1URL">user 1</a> <p>Post 1 </p> <p>yesterday</p> <button class="edit_post_button" data-id="postId1">Edit Post</button> </div> <div class="edit_post" hidden> <a href="User1URL">user 1</a> <textarea rows=3 cols=20>Post 1</textarea> <p>Yesterday</p> <button class="save_edit_post_button">Save</button> </div> </div> <div class="postDiv"> <div class="post"> <a href="User2URL">user 2</a> <p>Post 2 </p> <p>yesterday</p> <button class="edit_post_button" data-id="postId2">Edit Post</button> </div> <div class="edit_post" hidden> <a href="User2URL">user 2</a> <textarea rows=3 cols=20>Post 2</textarea> <p>Yesterday</p> <button class="save_edit_post_button">Save</button> </div> </div> </div>

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda