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

107
Visualizações
Controlador de eventos invocado dos veces para un evento de un solo clic

Estoy imitando una página de detalles de preguntas de desbordamiento de pila donde un usuario tiene la capacidad de eliminar su propia respuesta a una pregunta en particular. La página tiene un elemento que representa el recuento total de respuestas publicadas (0 respuestas, 1 respuesta, 2 respuestas, etc...). Una vez que un usuario hace clic en <p class="delete_answer">delete</p> , se envía una solicitud AJAX a la API, se elimina el modelo y la API devuelve una respuesta de código de estado 204.

El resultado deseado después de recibir la respuesta es disminuir el recuento de respuestas en 1 punto. Sin embargo, el resultado real disminuye el contador de respuestas en 2 puntos. Si hay 1 respuesta y se elimina, pasará de 1 respuesta a -1 respuesta, pero se supone que son 0 respuestas.

Entonces parece que el controlador de eventos se invoca dos veces. ¿Qué está causando que esto ocurra y cómo se puede remediar para que el conteo disminuya en 1?

 let posted_question_answers = document.querySelectorAll(".delete_answer"); posted_question_answers.forEach((answer) => { answer.addEventListener("click", function(event) { const question_answer = this.id; console.log(question_answer); let [question_id, answer_id] = Array.from(question_answer.matchAll(/(?<=\w+)\d+/g)); console.log(question_id, answer_id); var answer_vote = question_answer.split("__")[1]; const [answer, vote] = answer_vote.split("_") const request = new Request( `http://localhost:8000/api/v1/questions/${question_id}/answers/${answer_id}/`, { 'method': 'delete', 'headers': headers } ); fetch(request).then((response) => { this.parentElement.parentElement.parentElement.parentElement.remove(); let answer_count = document.getElementById("answer_count"); const n = parseInt(answer_count.textContent[0]) - 1; console.log(n) let answers; if (n > 1 || n == 0) { answers = ` answers`; } else { answers = ` answer`; } answer_count.textContent = `${n} ${answers}` }) }) })
about 4 years ago · Juan Pablo Isaza
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