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

93
Vistas
Javascript Web-Components - Agregar función a shadow-DOM

Estoy trabajando en nuevos componentes web para mi sitio, que funcionan bien solo con html/css. Sin embargo, no pude agregar algún tipo de funcionalidad de javascript a mi shadow DOM.

En mi caso, se trata de un botón dentro del componente, que debería activar una función que maneje el evento. Sin embargo, siempre recibo un error de que la función no está definida. Sé que el shadow DOM debería proteger el interior, pero no sé cómo implementar mi js correctamente. Espero que puedas ayudar :)

 class InfoSmall extends HTMLElement { // attributes constructor() { super(); // not important } // component attributes static get observedAttributes() { return ['']; } // attribute change attributeChangedCallback(property, oldValue, newValue) { if (oldValue == newValue) return; this[ property ] = newValue; }; connectedCallback() { const shadow = this.attachShadow({ mode: 'open' }); shadow.innerHTML = ` <div class="container> <button id="copy"></button> </div>` shadow.querySelector('#copy').addEventListener("click", function () { // functionality }); } }

También probé el atributo onclick pero me pasó lo mismo: no se definió ninguna función. O también traté de escribir el script dentro del HTML interno con una etiqueta HTML...

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

0

Está creando HTML no válido porque le falta una comilla doble en class="container>

Su código se puede condensar en:

 <script> customElements.define("my-element", class extends HTMLElement { constructor() { super() // sets AND returns 'this' scope .attachShadow({mode: 'open'}) // sets AND returns this.shadowRoot .innerHTML = `<div class="container"> <button>Click Me!</button> </div>`; this.shadowRoot .querySelector('button') .onclick = () => { alert("YEAH!") }; } }); </script> <my-element></my-element>

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