TL;DR
commandforpeger på et target, menscommandbeskriver den handling, knappen anmoder om.- Indbyggede kommandoer kan være helt deklarative; custom commands håndteres af target-elementet i JavaScript.
- Semantik og state forsvinder ikke: brug knapper, meningsfulde navne og korrekte
disabled/ARIA-states.
Indbyggede kommandoer
Nogle browserhandlinger kan beskrives direkte i HTML:
<button commandfor="details" command="toggle-popover"> Vis detaljer</button>
<div id="details" popover>…</div>HTML’en viser både, hvilket element der udløser handlingen, og hvilket target der modtager den. Det reducerer click-handler-kode uden at ændre komponentens semantik.
Custom commands
Applikationsspecifikke kommandoer skal begynde med --:
<button commandfor="scroller" command="--scroll" value="-0.9"> Forrige</button>
<button commandfor="scroller" command="--scroll" value="0.9"> Næste</button>Target-elementet håndterer kommandoen:
const scroller = document.querySelector("#scroller");
scroller.addEventListener("command", (event) => { if (event.command !== "--scroll") return;
scroller.scrollBy({ left: scroller.clientWidth * Number(event.source.value), behavior: "smooth", });});event.target er target-elementet, og event.source er knappen, som sendte
kommandoen. Eventet håndteres på target, fordi et command-event ikke bobler som
et almindeligt click-event.
Komponent-state og disabled
Invoker commands overtager ikke komponentens øvrige state. En carousel skal stadig deaktivere “forrige” ved starten og “næste” ved slutningen:
function updateControls() { const max = scroller.scrollWidth - scroller.clientWidth;
previous.disabled = scroller.scrollLeft <= 0; next.disabled = scroller.scrollLeft >= max - 1;}Det native disabled-attribut er bedre end kun en visuel klasse: browseren
opdaterer både interaktion og accessibility tree.