Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

196
Vistas
¿Por qué este formulario se envía dos veces?

Estoy tratando de entender por qué el formulario en el siguiente fragmento se envía varias veces, después de seguir los pasos:

  1. Haga clic en uno de los botones de envío. Aparecerá un div de confirmación.
  2. Haga clic en el botón Cancel en la confirmación.
  3. Ahora haga clic en el otro botón Enviar.
  4. Haga clic en el botón Yes en la confirmación.
  5. El registro de la consola muestra que el controlador de envío de formularios se activa dos veces.

¿Alguien puede ayudarme a ver cómo/por qué sucede esto, de modo que pueda evitar envíos múltiples?

 const $form = $("#form-test"); const $confirm = $("#confirm"); $form.on("submit", function (e, $btn) { e.preventDefault(); console.log("Submitting!", $btn); }); $confirm.find("button").on("click", function () { $confirm.hide(); }); $form.find("button").on("click", function (e) { const $btn = $(this); $("#btn-yes").one("click", function () { $form.trigger("submit", $btn); }); $("#btn-cancel").one("click", function () { console.log("Cancelled!", this); }); $confirm.show(); });
 #form-container, #confirm { border: 1px solid #000; padding: 10px; } #confirm { display: none; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="confirm"> Are you sure? <button id="btn-cancel" type="button">Cancel</button> <button id="btn-yes" type="button">Yes</button> </div> <div id="form-container"> <form id="form-test"> <input type="text" name="test" value="Foo"> <button type="button">Submit 1</button> <button type="button">Submit 2</button> </form> </div>

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Estás ejecutando lo siguiente:

 $("#btn-yes").one("click", function () { $form.trigger("submit", $btn); });

dentro del $form.find("button").on("click" . Si hace clic en los botones dos veces, agregará el controlador dos veces.

Quite el controlador anterior antes de agregar el nuevo, o agregue los controladores sí/cancelar fuera (no es necesario que se agreguen dentro del controlador de clic).

 const $form = $("#form-test"); const $confirm = $("#confirm"); $form.on("submit", function(e) { e.preventDefault(); console.log("Submitting!"); }); $confirm.find("button").on("click", function() { $confirm.hide(); }); $("#btn-yes").one("click", function() { $form.trigger("submit"); }); $("#btn-cancel").one("click", function() { console.log("Cancelled!", this); }); $form.find("button").on("click", function() { $confirm.show(); });
 #form-container, #confirm { border: 1px solid #000; padding: 10px; } #confirm { display: none; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="confirm"> Are you sure? <button id="btn-cancel" type="button">Cancel</button> <button id="btn-yes" type="button">Yes</button> </div> <div id="form-container"> <form id="form-test"> <input type="text" name="test" value="Foo"> <button type="button">Submit 1</button> <button type="button">Submit 2</button> </form> </div>

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda