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

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>

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.

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.

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

NavnAttributt-synkTypeStandardverdiArvet fraBeskrivelse
orientationstring'vertical'= horizontal eller vertical - Om radiogruppen skal vises vannrett eller loddrett
disabledbooleanfalse= deaktivere eller aktivere gruppen med radioknapper
errorMessagestring | undefinedFeilmelding 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
alreadyInvalidbooleanfalse
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.
getAllRadiosfunction () { // 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' ), ]; }
handleRadioClickfunction (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'); } }
syncRadioElementsasync 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; } } }
syncRadiosfunction () { 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()); } }
formControlControllernew FormControlController(this)SlRadioGroup
defaultSlotHTMLSlotElementSlRadioGroup
validationInputHTMLInputElementSlRadioGroup
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.
requiredbooleanfalseSlRadioGroupEnsures a child radio is checked before allowing the containing form to submit.
validitySlRadioGroupGets the validity state object
validationMessageSlRadioGroupGets the validation message

Metoder

NavnParametreReturtypeArvet fraBeskrivelse
updated
changedProperties: PropertyValues<this>
void
handlePropChange
oldValue: any
newValue: any
boolean
makeInvalid
resetValidation
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.

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.