diff --git a/src/better-select.js b/src/better-select.js index 118e639..439ae18 100644 --- a/src/better-select.js +++ b/src/better-select.js @@ -126,6 +126,9 @@ export class BetterSelect extends HTMLElement { #abortOpen #value = {} + /** @type {number} */ + #index = undefined + #internals = this.attachInternals() #states = new StateAttributeSet(this, this.#internals.states) @@ -313,6 +316,14 @@ export class BetterSelect extends HTMLElement { this.keyboardSearchAppend(key) event.preventDefault() event.stopPropagation() + } else if (key == "Delete") { + this.clear() + } else if (key == "ArrowDown") { + event.preventDefault() + this.next() + } else if (key == "ArrowUp") { + event.preventDefault() + this.previous() } } }) @@ -459,14 +470,17 @@ export class BetterSelect extends HTMLElement { /** @param {HTMLElement} option */ setOption(option) { - return this.setValue(option.dataset.value, option.innerText) + return this.setValue(Number(option.dataset.index), option.dataset.value, option.innerText) } /** + * @param {number} index * @param {string} value * @param {string} state */ - setValue(value, state=value) { + setValue(index, value, state=value) { + this.#index = Number(index) + this.#value = {value, state} this.dispatchEvent(new Event("change", {bubbles: true})); this.#internals.setFormValue(value, state) @@ -498,9 +512,10 @@ export class BetterSelect extends HTMLElement { if (value === undefined) { this.clear() } else { + let index = 0 for (const option of this.options) { if (option.value === String(value)) { - this.setValue(option.value, option.innerText) + this.setValue(index++, option.value, option.innerText) return } } @@ -512,8 +527,9 @@ export class BetterSelect extends HTMLElement { setOptions() { this.list.replaceChildren() + let idx = 0 for (const option of this.options) { - const fragment = f`