Skip to content

Instantly share code, notes, and snippets.

@MarkTiedemann
Created July 11, 2023 00:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MarkTiedemann/f2444b9440456c94f72d8113a0405aa9 to your computer and use it in GitHub Desktop.
Save MarkTiedemann/f2444b9440456c94f72d8113a0405aa9 to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<script>
customElements.define("x-input", class extends HTMLElement {
static formAssociated = true;
#input;
#internals;
constructor() {
super();
this.#input = document.createElement("input");
this.attachShadow({ mode: "open" }).appendChild(this.#input);
this.#internals = this.attachInternals();
}
#onChange() {
this.#internals.setFormValue(this.#input.value);
}
#onKeyUp(event) {
if (event.key === "Enter") {
this.#internals.form.submit();
}
}
connectedCallback() {
this.#input.addEventListener("change", this.#onChange.bind(this));
this.#input.addEventListener("keyup", this.#onKeyUp.bind(this));
}
disconnectedCallback() {
this.#input.removeEventListener("change", this.#onChange.bind(this));
this.#input.removeEventListener("keyup", this.#onKeyUp.bind(this));
}
});
</script>
<form>
<x-input name="test"></x-input>
</form>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment