Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

233
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!