¿Cómo crear un botón que envíe un formulario y descargue un pdf simultáneamente?

No existe un método directo para descargar y enviar el formulario simultáneamente, pero podemos realizar esta tarea si controlamos el envío del formulario y, al hacer clic en el botón Enviar formulario, primero activamos la descarga del PDF y luego enviamos el formulario. Entonces, los enfoques que podemos seguir para lograr esto se discuten a continuación:

Enfoque 1: crear un botón de formulario de envío fuera del formulario:

  • En primer lugar, cree un formulario con el botón de envío oculto.
  • Proporcione una identificación al botón de envío del formulario para acceder a él usando JS.
  • Cree un botón fuera del formulario y asígnele una identificación única para acceder a él.
  • Cree una etiqueta de anclaje utilizando la propiedad createElement y asignándole el atributo href y download.
  • Después de eso, simplemente llamamos al evento de clic del botón Enviar al hacer clic en el botón de descarga, usando la propiedad onClick.

HTML

<!DOCTYPE html>
<html lang="en">
<head>
    <style>
        form {
            color: green;
        }
    </style>
</head>
    
<body>
    <!-- GFG is the name of the file to be downloaded-->
    <!-- In order to run the code, the location of the 
        file "GFG.pdf" needs to be changed to your local
        directory, both the HTML and downloadable file 
        needs to be present in the same directory -->
    <form method="post">
        <label for="username">GFG Username</label>
        <input type="text" name="username" />
        <input type="submit" id="submit-form" 
            value="submit" hidden />
    </form>
  
    <button id="download-pdf">Submit</button>
  
    <script>
        const downloadPdf = document
            .querySelector("#download-pdf");
  
        const submitForm = document
            .querySelector("#submit-form");
  
        downloadPdf.addEventListener("click", () => {
  
            // Creating the element anchor that
            // will download pdf
            let element = document.createElement("a");
            element.href = "./GFG.pdf";
            element.download = "GFG.pdf";
  
            // Adding the element to body
            document.documentElement.appendChild(element);
  
            // Above code is equivalent to
            // <a href="path of file" download="file name"> 
  
            // onClick property, to trigger download
            element.click();
  
            // Removing the element from body
            document.documentElement.removeChild(element);
  
             // onClick property, to trigger submit form
            submitForm.click();
        });
    </script>
</body>
  
</html>

Producción:

Al enviar:

Enfoque 2: deshabilitar el envío al enviar: el método más fácil puede ser deshabilitar el envío al hacer clic en el botón Enviar formulario y realizar el envío manualmente al llamar a una función que descarga el PDF primero y luego envía el formulario.

  • En primer lugar, cree el formulario con el atributo onsubmit establecido en ‘return: false;’, lo que en realidad evita que el formulario se envíe al hacer clic en el botón Enviar.
  • Cree una etiqueta de anclaje utilizando la propiedad createElement y asignándole el atributo href y download.
  • Después de eso, simplemente llamamos al evento de envío en el formulario para enviarlo, después de activar la descarga desde el elemento que creamos.

HTML

<!DOCTYPE html>
<html>
  
<head>
    <style>
        form {
            color: green;
        }
    </style>
</head>
  
<body>
    <!-- GFG is the name of the file to be downloaded-->
    <!-- In order to run the code, the location of the 
        file "GFG.pdf" needs to be changed to your local
        directory, both the HTML and downloadable file  
        needs to be present in the same directory -->
    <form id="my-form" onsubmit="return: false;">
        <label for="username">GFG username</label>
        <input type="text" name="username" />
        <input type="submit" id="submit-form" 
            value="Submit" />
    </form>
  
    <script>
        const myForm = document
            .querySelector("#my-form");
  
        const submitForm = document
            .querySelector("#submit-form");
  
        submitForm.addEventListener("click", () => {
  
            // Creating element to download pdf
            var element = document.createElement('a');
  
            // Setting the path to the pdf file
            element.href = 'GFG.pdf';
  
            // Name to display as download
            element.download = 'GFG.pdf';
  
            // Adding element to the body
            document.documentElement.appendChild(element);
  
            // Above code is equivalent to
            // <a href="path to file" download="download name"/>
  
            // Trigger the file download
            element.click();
  
            // Remove the element from the body
            document.documentElement.remove(element);
  
            // Submit event, to submit the form
            myForm.submit();
        });
    </script>
</body>
  
</html>

Producción:

Al enviar:

Publicación traducida automáticamente

Artículo escrito por thinkswell y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *