<datalist>
Datalist provides a drop-down list of options with type-ahead (autocomplete) functionality built in
Datalist does nothing by itself. It needs to be referenced by a text field (as far as i know)
basic datalist into text field
datalist and a little dress-up
<select>
Select stands alone and presents a drop-down list without any type-ahead or filtering
basic select example
select into a text field (requires script)
Loading a <select> from a JSON array (pure JS)
Loading from a JSON file (fetch, no XHR)
states.json
[
{ “value”: “wa”, “label”: “Washington” },
{ “value”: “or”, “label”: “Oregon” }
]
Loading into a multi‑instance tool (your ecosystem‑friendly pattern)
This version is shaped for your launcher‑driven, instance‑based modules. It accepts a container element and returns the selected value(s) cleanly. js: export function createSelectTool(container, config) { const select = document.createElement(“select”); select.classList.add(“mpg-select”); container.appendChild(select); function populate(data) { select.innerHTML = “”; data.forEach(item => { const opt = document.createElement(“option”); opt.value = item.value; opt.textContent = item.label; select.appendChild(opt); }); } async function load() { if (Array.isArray(config.data)) { populate(config.data); } else if (typeof config.data === “string”) { const response = await fetch(config.data); const json = await response.json(); populate(json); } } load(); return { getValue: () => select.value, getSelectedItem: () => { const opt = select.options[select.selectedIndex]; return { value: opt.value, label: opt.textContent }; } }; }usage:
js:
const selector = createSelectTool(instanceRoot, {
data: “states.json” // or an array
});
// later:
const selected = selector.getSelectedItem();