onclick
будет работать только с глобально определенными функциями.
Вот очень быстрый взлом , который позволяет использовать функцию класса.
// Class for `<uio-key>`
class UioKey extends HTMLElement {
constructor() {
super();
let shadow = this.attachShadow({mode: 'open'});
shadow.innerHTML = '<div><div on-click="eKey">div</div><span>span</span></div>';
let a = shadow.querySelectorAll('[on-click]');
a.forEach(
el => {
const handlerName = el.getAttribute('on-click');
el.addEventListener('click', this[handlerName]);
}
);
}
eKey() {
window.alert('class eKey function');
}
}
// Define our web component
customElements.define('uio-key', UioKey);
<hr/>
<uio-key></uio-key>
<hr/>
Я использую пользовательский атрибут on-click
как способ получения всех элементов, которые хотят обработчик щелчка, затем я беру значение этого атрибута и использую его какимя функции класса и передать его в функцию addEventListener
.