Vis adgangskode

Opgavebeskrivelse

Knappen har allerede et stabilt synligt navn og en initial aria-pressed-state. Skriv JavaScriptet, som holder state og inputtype synkroniseret.

  1. Læs knappens ariaPressed-property, og omdan strengværdien til en boolean.
  2. Skift inputtets type mellem password og text.
  3. Sæt ariaPressed til strengversionen af den nye state.
  4. Kontrollér, at fokus bliver på knappen, og at adgangskodens værdi ikke ændres.
  5. Fastgør knappen under Password reveal, og følg dens pressed-state, mens du aktiverer den med mus, Enter og Mellemrum.

Knappens navn ændres ikke mellem “Vis” og “Skjul”. I denne variant er den en toggle button: navnet beskriver det, der slås til og fra, mens aria-pressed kommunikerer den aktuelle state.

const button = document.querySelector(".show-password")
const password = document.querySelector("#password")

// Fejlstate fra den forrige øvelse er givet på forhånd.
function syncAriaInvalid() {
  const isInvalid = password.matches(":user-invalid")

  if (isInvalid) {
    password.ariaInvalid = "true"
  } else {
    password.removeAttribute("aria-invalid")
  }
}

password.addEventListener("invalid", () => {
  password.ariaInvalid = "true"
})

password.addEventListener("focusout", syncAriaInvalid)

password.addEventListener("input", () => {
  if (password.ariaInvalid === "true" && password.validity.valid) {
    password.removeAttribute("aria-invalid")
  }
})

function togglePassword() {
  // 1. Er adgangskoden synlig nu?
  // 2. Skift inputtets type.
  // 3. Opdatér knappens aria-pressed med samme boolean.
}

button.addEventListener("click", togglePassword)
Preview

Syntaks

const isVisible = button.ariaPressed === "true"

button.ariaPressed = String(!isVisible)
password.type = isVisible ? "password" : "text"