Hola, quiero que mi botón esté deshabilitado después de enviar el formulario. Deshabilitar el botón funciona pero no ejecuta el código php.
Probé diferentes scripts que se publican en Internet pero todos hacen lo mismo: deshabilitar el botón sin ejecutar el código php. Entonces, cuando se envía el formulario, debe hacer eco de "prueba", pero no hace eco de "prueba".
Cuando elimino la línea "e.preventDefault();" entonces el botón ya no se desactivará y el eco aún no se muestra
Código:
<!DOCTYPE html> <html lang="en"> <body> <h1>jQuery - How to disabled submit button after clicked</h1> <form id="formABC" method="POST"> <input type="submit" name="submit" id="btnSubmit" value="Submit"></input> </form> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <input type="button" value="i am normal abc" id="btnTest"></input> <script> $(document).ready(function () { $("#formABC").submit(function (e) { //stop submitting the form to see the disabled button effect e.preventDefault(); //disable the submit button $("#btnSubmit").attr("disabled", true); //disable a normal button $("#btnTest").attr("disabled", true); return true; }); }); </script> <?php if (isset($_POST['submit'])) { echo "test"; } ?> </body> </html>e.preventDefault(); detiene el envío del formulario por completo.
Si no tenía eso, entonces el problema se convierte en:
if (isset($_POST['submit'])) {
El JS desencadenado por el evento de envío se ejecuta antes de que se recopilen los datos del formulario que se enviará al servidor.
Está deshabilitando el botón de envío, lo que impide que sea un control exitoso . Solo los controles exitosos se incluyen en los datos del formulario, por lo que ya no tiene un elemento de datos de submit en $_POST , por lo que la declaración if resulta falsa.
En su lugar, puede usar una entrada oculta para pasar esos datos, o simplemente probar si la solicitud es POST con $_SERVER['REQUEST_METHOD'] .
Si desea deshabilitar el botón después de ejecutar el código php, debe hacerlo cuando la página se vuelva a cargar. Cualquier JavaScript que se ejecute durante el evento "enviar" ocurre antes de que la solicitud que contiene los datos del formulario se envíe al servidor para que PHP la procese. Y su JavaScript actual deshabilitaría el botón, lo que significa que su valor no se envía al servidor, por lo que su declaración if no se ejecutará.
Entonces, si nos deshacemos del código JS y dejamos que se envíe normalmente, entonces cuando PHP detecta que se han enviado datos, puede usar esa lógica para simplemente no mostrar el botón o mostrarlo pero dejarlo deshabilitado.
Algo como esto debería funcionar:
<!DOCTYPE html> <html lang="en"> <body> <h1>jQuery - How to disabled submit button after clicked</h1> <?php if(isset($_POST["submit"])) { echo "Thanks for submitting the form"; } else { ?> <form id="formABC" method="POST"> <input type="submit" name="submit" id="btnSubmit" value="Submit"></input> </form> <?php } ?> <input type="button" value="i am normal abc" id="btnTest"></input> </body> </html>Esa versión omitirá el formulario y el botón por completo cuando se acaba de enviar el formulario.
(Tenga en cuenta, por supuesto, que esto en realidad no impide que alguien envíe una solicitud a su servidor y envíe datos... solo evita que lo haga a través de la interfaz de usuario de su página web inmediatamente después de un envío anterior desde la misma ventana del navegador. Entonces, si esto es suficiente para sus propósitos depende del objetivo de su aplicación y el nivel de seguridad o las consideraciones de validación que debe tener en cuenta).
Para mostrar su texto "prueba", sería necesario volver a cargar la página que recibe el parámetro que definió, ya que no activa el formulario, la página no se recarga, por lo que no mostrará nada en absoluto.
Debe corregir la lógica de su código.