Skip to content

nve-radio-group

Brukes til å gruppere radioknapper som hører sammen. Den kan inneholde både nve-radio og nve-radio-button. Pass på at nve-radio eller nva-radio-button har en value, ellers vil ikke radiogruppa fungere som forventet.

Arvet fra SlRadioGroup.

Denne komponenten bygger på en Shoelace-komponent. Sjekk også dokumentasjonen i Shoelace for å få full oversikt over hvordan komponenten funker.

Feil / oppgaver / PR

Ingen som vi vet om. Hvis du finner noe muffens, registrer en feil under Issues i Github og merk den med nve-radio-group.

 

html
<nve-radio-group label="Vennligst velg en av disse">
  <nve-radio value="valg1">1</nve-radio>
  <nve-radio value="valg2">2</nve-radio>
  <nve-radio value="valg3">3</nve-radio>
</nve-radio-group>

Eksempler

Med radioknapper

html
<nve-radio-group label="Vennligst velg en av disse">
  <nve-radio-button value="valg1">1</nve-radio-button>
  <nve-radio-button value="valg2">2</nve-radio-button>
  <nve-radio-button value="valg3">3</nve-radio-button>
</nve-radio-group>

Retning

Bruk orientation for å velge retning. vertical er standard.

html
<nve-radio-group label="vertical">
  <nve-radio value="valg1">1</nve-radio>
  <nve-radio value="valg2">2</nve-radio>
</nve-radio-group>
<br />
<nve-radio-group label="horizontal" orientation="horizontal">
  <nve-radio value="valg1">1</nve-radio>
  <nve-radio value="valg2">2</nve-radio>
</nve-radio-group>

Størrelse

Bruk size for å sette størrelse. medium er standard.

html
<nve-radio-group size="small" label="Vennligst velg en av disse">
  <nve-radio value="valg1">Valg 1</nve-radio>
  <nve-radio value="valg2">Valg 2</nve-radio>
</nve-radio-group>
<br />
<nve-radio-group label="Vennligst velg en av disse">
  <nve-radio value="valg1">Valg 1</nve-radio>
  <nve-radio value="valg2">Valg 2</nve-radio>
</nve-radio-group>
<br />
<nve-radio-group size="large" label="Vennligst velg en av disse">
  <nve-radio value="valg1">Valg 1</nve-radio>
  <nve-radio value="valg2">Valg 2</nve-radio>
</nve-radio-group>

Valgt verdi

value gir deg valgt radioknapp sin value. Klikk på elementet og sjekk konsollet for å se value.

html
<nve-radio-group label="Vennligst velg 1 eller 2" onclick="console.log('value er ' + value)">
  <nve-radio value="valg1">1</nve-radio>
  <nve-radio value="valg2">2</nve-radio>
</nve-radio-group>

Du kan også sette value selv.

html
<nve-radio-group label="Her er 2 valgt på forhånd" value="valg2">
  <nve-radio value="valg1">1</nve-radio>
  <nve-radio value="valg2">2</nve-radio>
</nve-radio-group>

Deaktivering

Bruk disabled for å deaktivere hele gruppa. TODO: Dette virker ikke, må fikses. Men du kan deaktivere enkelt-elementer i gruppa.

html
<nve-radio-group label="disabled" disabled>
  <nve-radio value="valg1">1</nve-radio>
  <nve-radio value="valg2">2</nve-radio>
</nve-radio-group>

<nve-radio-group label="enabled">
  <nve-radio value="valg1">1</nve-radio>
  <nve-radio value="valg2">2</nve-radio>
</nve-radio-group>

Obligatorisk

Bruk required for å tvinge bruker til å velge minst ett av valgene i gruppa og legg inn en feilmelding i errorMessage. Bruk requiredlabel hvis du vil vise noe annet enn *Obligatorisk. Gruppa må ligge i en <form> for at validering skal funke.

html
<!-- Bruker preventDefault så ikke sida lastes på nytt når du trykker på knappen -->
<form onsubmit="event.preventDefault();">
  <nve-radio-group label="Her må du velge noe" required errorMessage="Du må bestemme deg">
    <nve-radio value="valg1">1</nve-radio>
    <nve-radio value="valg2">2</nve-radio>
  </nve-radio-group>

  <nve-radio-group label="Please choose" required requiredLabel="*Required" errorMessage="Please decide">
    <nve-radio value="valg1">1</nve-radio>
    <nve-radio value="valg2">2</nve-radio>
  </nve-radio-group>

  <nve-button type="submit">Submit</nve-button>
</form>

Spor

NavnBeskrivelse
Standardslot hvor <nve-radio> eller <nve-radio-button> plasseres
(standard)The default slot where `<sl-radio>` or `<sl-radio-button>` elements are placed.
labelThe radio group's label. Required for proper accessibility. Alternatively, you can use the `label` attribute.
help-textText that describes how to use the radio group. Alternatively, you can use the `help-text` attribute.

Hendelser

NavnArvet fraBeskrivelse
sl-changeSlRadioGroupEmitted when the radio group's selected value changes.
sl-inputSlRadioGroupEmitted when the radio group receives user input.
sl-invalidSlRadioGroupEmitted when the form control has been checked for validity and its constraints aren't satisfied.

Egenskaper

NavnTypeArvet fraBeskrivelseReflected
orientationstring = 'vertical'= horizontal eller vertical - Om radiogruppen skal vises vannrett eller loddrett
disabledboolean = false= deaktivere eller aktivere gruppen med radioknapper
errorMessagestring | undefined Feilmelding som vises under radiogruppe. Vi har ikke tilgang til SlRadioGroup errorMessage så må overskrive med vår egen
requiredLabelstring = '*Obligatorisk'Tekst som vises for å markere at et felt er obligatorisk. Er satt til "*Obligatorisk" som standard.
testIdstring = ''Hjelpevariabel som sjekker om radio gruppe er allerede invalid
alreadyInvalidboolean = false
errorMessageCopystring = ''Ikke mulig å få taket i errorMessage til superklassen (SlRadioGroup), og den trengs for å vise feilmelding under radio gruppe. Samtidig errorMessage fra SlRadioGroup (som er tom, som deretter gir oss default nettleseren sin melding) overskriver NveRadioGroup errorMessage prop når sl-input trigges, derfor må vi lagre den i staten når komponenten renderes første gang.
getAllRadios = function () { // Lagt til nve-radio og nve-radio-button return [ // @ts-expect-error - bruk av this i private metode ...this.querySelectorAll<SlRadio | SlRadioButton | NveRadio | NveRadioButton>( 'sl-radio, sl-radio-button, nve-radio, nve-radio-button' ), ]; }
handleRadioClick = function (event) { // Lagt til nve-radio og nve-radio-button const target = event.target.closest('sl-radio, sl-radio-button, nve-radio, nve-radio-button'); // @ts-ignore const radios = this.getAllRadios(); // @ts-ignore const oldValue = this.value; if (!target || target.disabled) { return; } // lagt til focus på klikk const controls = target.shadowRoot.querySelectorAll("span[part='base']"); if (controls.length > 0) { controls[0].focus(); } // @ts-ignore this.value = target.value; radios.forEach((radio: { checked: boolean }) => (radio.checked = radio === target)); // @ts-ignore if (this.value !== oldValue) { // @ts-ignore this.emit('sl-change'); // @ts-ignore this.emit('sl-input'); } }
syncRadioElements = async function () { // @ts-ignore const radios = this.getAllRadios(); await Promise.all( // Sync the checked state and size // eslint-disable-next-line @typescript-eslint/no-explicit-any radios.map(async (radio: { updateComplete: any; checked: boolean; value: any; size: any }) => { await radio.updateComplete; // @ts-ignore radio.checked = radio.value === this.value; // @ts-ignore radio.size = this.size; }) ); // lagt til nve-radio-button // @ts-ignore this.hasButtonGroup = radios.some( // @ts-ignore (radio) => radio.tagName.toLowerCase() === 'sl-radio-button' || radio.tagName.toLowerCase() === 'nve-radio-button' ); // eslint-disable-next-line @typescript-eslint/no-explicit-any if (!radios.some((radio: { checked: any }) => radio.checked)) { // @ts-ignore if (this.hasButtonGroup) { const buttonRadio = radios[0].shadowRoot?.querySelector('button'); if (buttonRadio) { buttonRadio.tabIndex = 0; } } else { radios[0].tabIndex = 0; } } // @ts-ignore if (this.hasButtonGroup) { // lagt til nve-button-group const buttonGroup = // @ts-ignore this.shadowRoot?.querySelector('sl-button-group') || this.shadowRoot?.querySelector('nve-button-group'); if (buttonGroup) { buttonGroup.disableRole = true; } } }
syncRadios = function () { if ( (customElements.get('sl-radio') && customElements.get('sl-radio-button')) || // lagt til nve-radio og nve-radio-button (customElements.get('nve-radio') && customElements.get('nve-radio-button')) ) { // @ts-ignore this.syncRadioElements(); return; } if (customElements.get('sl-radio') || customElements.get('nve-radio')) { // @ts-ignore this.syncRadioElements(); } else { // @ts-ignore customElements.whenDefined('sl-radio').then(() => this.syncRadios()); } // lagt til nve-radio-button if (customElements.get('sl-radio-button') || customElements.get('nve-radio-button')) { // @ts-ignore this.syncRadioElements(); } else { // Rerun this handler when <sl-radio> or <sl-radio-button> is registered // @ts-ignore customElements.whenDefined('sl-radio-button').then(() => this.syncRadios()); // lagt til nve-radio-button // @ts-ignore customElements.whenDefined('nve-radio-button').then(() => this.syncRadios()); } }
formControlController = new FormControlController(this)SlRadioGroup
defaultSlotHTMLSlotElement SlRadioGroup
validationInputHTMLInputElement SlRadioGroup
defaultValuestring = ''SlRadioGroup
labelstring = ''SlRadioGroupThe radio group's label. Required for proper accessibility. If you need to display HTML, use the `label` slot instead.
helpTextstring = ''SlRadioGroupThe radio groups's help text. If you need to display HTML, use the `help-text` slot instead.
namestring = 'option'SlRadioGroupThe name of the radio group, submitted as a name/value pair with form data.
valuestring = ''SlRadioGroupThe current value of the radio group, submitted as a name/value pair with form data.
size'small' | 'medium' | 'large' = 'medium'SlRadioGroupThe radio group's size. This size will be applied to all child radios and radio buttons.
formstring = ''SlRadioGroupBy default, form controls are associated with the nearest containing `<form>` element. This attribute allows you to place the form control outside of a form and associate it with the form that has this `id`. The form must be in the same document or shadow root for this to work.
requiredboolean = falseSlRadioGroupEnsures a child radio is checked before allowing the containing form to submit.
validity SlRadioGroupGets the validity state object
validationMessage SlRadioGroupGets the validation message

Metoder

NavnParametreReturtypeArvet fraBeskrivelse
handlePropChange
oldValue: any
newValue: any
boolean
handleSizeChangeSlRadioGroup
handleValueChangeSlRadioGroup
checkValiditySlRadioGroupChecks for validity but does not show a validation message. Returns `true` when valid and `false` when invalid.
getFormHTMLFormElement | nullSlRadioGroupGets the associated form, if one exists.
reportValiditybooleanSlRadioGroupChecks for validity and shows the browser's validation message if the control is invalid.
setCustomValidity
message:
SlRadioGroupSets a custom validation message. Pass an empty string to restore validity.
focus
options: FocusOptions
SlRadioGroupSets focus on the radio-group.

Deler

NavnBeskrivelse
form-controlThe form control that wraps the label, input, and help text.
form-control-labelThe label's wrapper.
form-control-inputThe input's wrapper.
form-control-help-textThe help text's wrapper.
button-groupThe button group that wraps radio buttons.
button-group__baseThe button group's `base` part.