Внутреннее поле <input>
отправляет событие input
каждый раз, когда изменяется его значение.Это событие может быть записано либо в вашем компоненте, либо в коде, использующем ваш компонент.
Событие change
происходит только в определенных ситуациях, поэтому лучшим вариантом будет событие input
.
Приведенный ниже код показывает, как компонент прослушивает событие input
, как и внешний код.
function validate(event) {
console.log("input can be validated");
}
class TextBox extends HTMLElement {
constructor() {
super();
const shadow = this.attachShadow({ mode: 'open' });
shadow.innerHTML = `
<style>
input {
width: 300px;
}
</style>
`;
const textbox = document.createElement("input");
shadow.appendChild(textbox);
textbox.addEventListener("input", validate);
textbox.focus();
}
get value() {
console.log("get");
let textbox = this.shadowRoot.querySelector("input");
return textbox.value;
}
set value(newValue) {
console.log("set");
let textbox = this.shadowRoot.querySelector("input");
textbox.value = newValue;
}
}
customElements.define('test-textbox', TextBox);
const el = document.querySelector('test-textbox');
el.addEventListener("input", (evt) => {
console.log('input event from the outside.');
});
<test-textbox></test-textbox>