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

149
Vistas
¿Cómo obtener una identificación desde el interior de una plantilla usando DOM?

Así que tengo una configuración de plantilla y un formulario dentro de ella,

¿Cómo puedo obtener la identificación del formulario ya que necesito acceder al formulario para acceder al botón de envío para el manejo de eventos?

 <template id ="Request"> <form id="add"> <label>Name <input type="text" name="name" required/> </label> <label>Price <input type="text" name="price" required/> </label> <input type="submit" value="Add"/> </form> </template>

Esto es lo que intenté usando la línea de comando de los navegadores

 document.querySelector('#request > add'); returns null document.getElementById('request').querySelector("#add [name=name]"); returns null document.querySelector("#request").getElementById("add") function does not exist

Lo más cerca que tengo es esto

 document.querySelector("#request").content.getElementById("add")

Esto devuelve el contenido de la sección de agregar, pero planeo agregarle un detector de eventos y el "contenido" no quiere trabajar con él. ¿Hay alguna alternativa a ella?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El contenido dentro de un elemento HTML <template> es un fragmento de documento y, por lo tanto, no se puede consultar desde el documento raíz de la misma manera que los elementos secundarios de los elementos HTML típicos.

En lugar de intentar agregar un detector de eventos a un elemento secundario de nuestra <template> , queremos esperar hasta que el content de nuestra plantilla se represente en el DOM.

Según el ejemplo de código que compartió en https://jsfiddle.net/mhk4z0wL/ , agregaríamos el detector de eventos justo después de la llamada para agregar el helpTemplate.content clonado:

 data.appendChild(helpTemplate.content.cloneNode(true)); data.querySelector('#add').addEventListener('submit', () => { alert('I caught your submit!'); e.preventDefault(); });

Esto funcionará, pero no es ideal. Cada vez que el usuario cambia la página renderizada a una que no sea Ayuda haciendo clic en uno de los otros botones de la página, nuestro formulario de Ayuda se eliminará del DOM. En este caso, es mejor eliminar nuestro detector de eventos para evitar pérdidas de memoria. Podríamos hacer esto creando una referencia a nuestra función de devolución de llamada del controlador de envío y asegurándonos de eliminarla dentro de cada controlador de representación de página:

 function onSubmitHelpForm(e) { alert('I caught your submit!'); e.preventDefault(); } function clearOnSubmitListener() { const helpForm = document.getElementById('add'); if (helpForm) { helpForm.removeEventListener('submit', onSubmitHelpForm); } }

Y luego, dentro de cada controlador de clic de botón, tendríamos: clearOnSubmitListener();

Para ver un ejemplo de cómo funcionaría esto, vea este violí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