Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

348
Views
Descarga el código QR generado usando Javscript

Estoy usando esta biblioteca que genera códigos QR como imágenes PNG: https://davidshimjs.github.io/qrcodejs/

Quiero tener un botón de descarga para el código QR generado, sin embargo, el lienzo solo aparece cuando se genera la imagen. ¿Algún consejo sobre cómo poner un botón de descarga?

Aquí está mi código de muestra para mi proyecto:

PHP:

 <div> <!-- <input type="text" id="qr-data" value="<?php echo uniqid();; ?>"/> --> <button onclick="generateQR()">Generate</button> <div id="qrcode"></div> <script src="qrcode.min.js"></script> </div>

JavaScript:

 <script> var qrdata = document.getElementById("qr-data"); var qrcode = new QRCode(document.getElementById("qrcode")); function generateQR() { var data = qrdata.value; qrcode.makeCode(data); } </script>
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Una búsqueda rápida muestra una forma sencilla de descargar una imagen al hacer clic en ella :

  • necesitamos un enlace;
  • con un atributo de download ;
  • con el mismo href que la imagen src ;

La imagen src que buscamos no existe hasta que se genera el código. Entonces necesitamos copiarlo dinámicamente una vez que se crea. Por lo tanto, necesitaremos agregar un enlace/botón de descarga a su HTML y copiar el código QR src al enlace href después de generarlo.

Entonces, primero, agregue el enlace:

 <a id="download" href="" download="qr.png"><button>Download</button></a>

A continuación, necesitamos copiar el src generado. Un inconveniente es que debemos esperar a que se genere el código QR antes de poder copiarlo. Intentar hacer la copia inmediatamente después de su línea makeCode() no funciona, porque makeCode() tarda un tiempo en ejecutarse y se ejecuta de forma asíncrona. Eso significa que el código inmediatamente después de esa línea se ejecutará antes de que makeCode() haya terminado. ¡No podemos copiar el src antes de que exista el src !

No hay eventos documentados de tipo exitoso o terminado o devoluciones de llamada para QRCode.js, por lo que la opción más segura parece ser hacerlo más tarde, cuando se hace clic en el botón de descarga. Así que agregue un detector de eventos para nuestro enlace de descarga:

 var link = document.getElementById("download"); link.addEventListener("click", setUpDownload);

Y agregue la función setUpDownload() que realmente hace la copia:

 function setUpDownload() { // Find the image inside the #qrcode div var image = document.getElementById("qrcode").getElementsByTagName("img"); // Get the src attribute of the image, which is the data-encoded QR code var qr = image[0].src; // Copy that to the download link link.href = qr; }

¡Y hemos terminado! Trabajando JSFiddle .

Nota al margen

Se considera una buena práctica separar su HTML de su JS. Eso significa usar controladores de eventos en JS, en lugar de usar onclick() en línea. Yo sugeriría cambiar esto:

 <button onclick="generateQR()">Generate</button>

A esto (déle una id para que sea fácil de consultar más adelante):

 <button id="button">Generate</button>

Y agregar un detector de eventos en su JS para hacer el mismo trabajo:

 var button = document.getElementById("button"); button.addEventListener("click", generateQR);
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!