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

120
Vistas
Cómo insertar mi texto de un campo de entrada en un literal de plantilla de Javascript pero el resultado no está definido

Creé un campo de entrada donde puede ingresar texto y estoy tratando de insertar ese texto en un literal de plantilla. Luego quiero usarlos en otros scripts. El problema al que me enfrento es que después de obtener el texto del campo de entrada y asignarlo a una variable, coloco esa variable en el literal de la plantilla y obtengo 'indefinido' en lugar del texto que escribí. ¿Alguna idea de por qué esto podría estar pasando y formas de solucionarlo? Gracias por adelantado.

Aquí está el código html:

 <label style="color:black;">Enter words:</label> <input type="text" name="" id="myText"><br> <button id="myButton">Button</button> <button onclick="zipFile()">Download Button</button> <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.7.1/jszip.min.js"></script> <script src="http://cdn.jsdelivr.net/g/filesaver.js"></script>

Aquí está el javascript

 let inputText = "originalText"; document.getElementById("myButton").onclick = function (){getMyName()}; function getMyName(){ inputText = document.getElementById("myText").value; console.log("This is input Text: ", inputText); console.log("This is input text but from scriptTemplate " + scriptTemplate); } const scriptTemplate = ` ${inputText}; `; var zip = new JSZip(); function zipFile(){ zip.file("script.js", scriptTemplate); zip.generateAsync({type:"blob"}) .then(function(content){ saveAs(content, "test1.zip"); }); }
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Está creando el valor de scriptTemplate en la inicialización del script, mientras que debe intentar crearlo desde la propia función. De esta forma, se crea después de cada llamada a zipFile :

 function zipFile(){ const scriptTemplate = ` ${inputText}; `; zip.file("script.js", scriptTemplate); zip.generateAsync({type:"blob"}) .then(function(content){ saveAs(content, "test1.zip"); }); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Su problema aquí es que está declarando scriptTemplate fuera de cualquier cuerpo de función. Eso significa que se ejecuta cuando el script se carga por primera vez en la página, pero no es parte de la función que se ejecuta cuando hace clic en un botón. Intentaría agregar devoluciones a sus funciones, perder el botón para obtener el nombre y luego llamar a la función getMyName cuando el usuario vaya a descargarlo.

 const zip = new JSZip(); function getMyName() { const inputText = document.getElementById("myText").value; console.log("This is input Text: ", inputText); return inputText; } function zipFile() { const inputText = getMyName(); const scriptTemplate = ` ${inputText}; `; console.log("This is input text but from scriptTemplate " + scriptTemplate); zip.file("script.js", scriptTemplate); zip.generateAsync({ type: "blob" }) .then(function (content) { saveAs(content, "test1.zip"); }); }
 <label>Enter words:</label> <input type="text" id="myText"><br> <button onclick="zipFile()">Download Button</button> <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.7.1/jszip.min.js"></script> <script src="http://cdn.jsdelivr.net/g/filesaver.js"></script>

about 4 years ago · Juan Pablo Isaza Denunciar

0

¿Seguramente obtienes originalText al generar scriptTemplate ?

Tal vez tenías más esperanzas en cómo funcionan los literales de plantilla. No producen algún nuevo tipo de cadena funcional mágica que resulte en diferentes valores cada vez que se accede a ellos. Solo producen cadenas. Aunque es posible crear literales de plantilla "personalizados", las llamadas plantillas etiquetadas, que pueden producir lo que decida, y si logra diseñar algún valor de retorno interesante vinculado a algún otro valor, eso sería una ingeniería excesiva, por decir lo menos.

  • ¿Necesita myButton por algún motivo? Si no, solo lea la entrada al hacer clic en el botón de descarga.
  • De lo contrario, una variable compartida es de hecho una opción, no necesita literales de plantilla para eso.
  • Otra opción es usar un campo de entrada oculto y establecer su valor cuando se hace clic en myButton y leerlo cuando necesite el valor (es decir, hacer clic en el botón de descarga)

¡Feliz codificación!

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