¡todo el mundo! He estado trabajando en un proyecto en JavaScript, generalmente enviando solicitudes al servidor usando ajax. Quiero mostrar un mensaje de confirmación y permitir que el usuario presione el botón continuar para continuar con la solicitud. Cuando ejecuto el primer clic que muestra el cuadro de diálogo de confirmación, el script se ejecuta correctamente una vez. Sin embargo, cuando intento hacer clic en el botón nuevamente, la secuencia de comandos se ejecuta dos veces y sigue aumentando la cantidad de veces que hago clic en el botón Enviar, solo se ejecuta correctamente cuando actualizo la página. En realidad, el primer clic es en una función de clic que invoco en cada resultado diferente devuelto por el script PHP y necesito la identificación para enviar una solicitud en su contra. Estoy buscando una manera en la que pueda borrar la ejecución del script y dejar que comience de nuevo cada vez que haga clic en el botón Enviar. Aquí está la muestra:
... function removePerson(id) { $("#confirmDialog").show(function(){ $("#confirm").click(function(){ $.post('server/process.php'{id:id}); }); }Por favor, realmente necesito su ayuda con esto.
El problema es que está adjuntando un nuevo controlador de eventos al botón de confirmación en cada llamada a removePerson . Puede usar .off("click") para eliminar el controlador de eventos anterior antes de registrar uno nuevo. Algo como esto debería funcionar:
function removePerson(id) { $("#confirmDialog").show(); $("#confirm").off("click").on("click", function() { $.post("server/process.php", { id: id }); // just for the demo console.log(id); $("#confirmDialog").hide(); }); } #confirmDialog { display: none; padding: 20px; background: #eee; margin-bottom: 10px; } <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="confirmDialog"> Remove person? <button id="confirm">confirm</button> </div> <button onclick="removePerson(1)">remove ID 1</button> <button onclick="removePerson(2)">remove ID 2</button> <button onclick="removePerson(3)">remove ID 3</button>