Hva er nytt med skjemaer i 2022? PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Hva er nytt med skjemaer i 2022?

Nettlesere legger stadig til nye HTML-, JavaScript- og CSS-funksjoner. Her er noen nyttige tillegg til å jobbe med skjemaer du kanskje har gått glipp av...

requestSubmit()

Safari 16 vil være den siste nettleseren å legge til støtte for requestSubmit.

Før vi ser på hvordan .requestSubmit() fungerer, la oss minne oss selv på hvordan programmering av et skjema med JavaScript fungerer når du bruker .submit() metode. Sende inn skjema med submit() utløser ikke en innsendingshendelse. Så i følgende kode sendes skjemaet, preventDefault() har ingen effekt, og ingenting er logget på konsollen:

const form = document.forms[0];
form.addEventListener('submit', function(event) {
  // code to submit the form goes here
  event.preventDefault();
  console.log('form submitted!');
});

document.querySelector('.btn').addEventListener('click', function() {
  form.submit();
})

.submit() vil også ignorere all HTML-skjemavalidering. Gitt følgende markering, vil skjemaet sendes når inndata er tomt selv om inndata har en required Egenskap:

<form>   
  <label for="name">Name</label>
  <input required name="name" id="name" type="text">
</form>

.requestSubmit() er en alternativ måte å sende inn et skjema ved hjelp av JavaScript, men i motsetning til .submit(), vil HTML-skjemavalidering forhindre at skjemaet sendes inn. Hvis alle dataene som er lagt inn i skjemaet, består valideringen, submit arrangementet vil bli avfyrt, som betyr "skjema sendt!" vil bli logget på konsollen i følgende eksempel:

form.addEventListener('submit', function(event) {
  event.preventDefault();
  console.log('form submitted!');
});

document.querySelector('.btn').addEventListener('click', function() {
  form.requestSubmit();
})

Du kan allerede oppnå dette ved å klikke på skjemaets send-knapp, men requestSubmit er kanskje en mer elegant løsning.

submitter egenskapen til å sende hendelsen

De SubmitEvent.submitter skaffet eiendom full støtte for flere nettlesere med utgivelsen av Safari 15.4. Denne skrivebeskyttede egenskapen spesifiserer <button> or <input type="submit"> element som førte til at et skjema ble sendt inn.

<form>
  <button name="foo" value="bar" type="submit">Bar</button>
  <button name="foo" value="baz" type="submit">Baz</button>
</form>

Når du har flere innsendingsknapper eller inndata, hver med en annen verdi, vil bare verdien av knappen eller input som ble klikket på for å sende inn skjemaet sendes til serveren, i stedet for begge verdiene. Det er ikke noe nytt. Det nye er at arrangementslytteren for innsendingsarrangementet nå har tilgang til event.submitter eiendom. Du kan bruke dette til å legge til en klasse til knappen eller input som utløste innsendingen av skjemaet, for eksempel, eller for å få value eller andre HTML-attributter.

document.forms[0].addEventListener('submit', function(event) {
  event.preventDefault();
  console.log(event.submitter.value);
  console.log(event.submitter.formaction);
  event.submitter.classList.add('spinner-animation');
})

formdata hendelse

Dette er ikke spesielt nytt, men bare oppnådd støtte på tvers av nettlesere med utgivelsen av Safari 15. Hovedbrukssaken for formdata event lar tilpassede elementer delta i skjemainnsendinger. Utenfor webkomponenter kan det likevel være nyttig.

Du legger til en formdata hendelseslytter til skjemaet du vil samhandle med:

document.querySelector('form').addEventListener('formdata', handleFormdata);

Arrangementet utløses både av en vanlig HTML-skjemainnsending og også av en forekomst av new FormData(). event.formData inneholder alle dataene som sendes inn.

function handleFormdata(event) {
  for (const entry of event.formData.values()) {
    console.log(entry);
  }
}

Tilbakeringingsfunksjonen for formdata hendelseslytter kjører før dataene sendes til serveren, noe som gir deg en sjanse til å legge til eller endre dataene som sendes.

function handleFormdata(event) {
  event.formData.append('name', 'John');
}

Du kunne ha endret eller lagt til FormData inne i send hendelsesbehandleren men formdata lar deg skille ut logikken. Det er også et alternativ til å bruke skjulte inndata i markeringen av skjemaet ditt i tilfeller der du sender inn skjemaet "på gammeldags måte" - dvs. stole på den innebygde funksjonaliteten til HTML for å sende inn skjemaet i stedet for å gjøre det med fetch.

showPicker() for inngangselementer

showPicker() har vært støttes siden Chrome 99, Firefox 101, og i den kommende Safari 16. For et input-element hvis typeattributt er enten Dato, Month, Week, Time, datetime-local, farge eller fil, showPicker() gir en programmatisk måte å vise valggrensesnittet på. For farge- og filinndata har det alltid vært mulig å programmere viser velgeren ved å ringe .click på inngangen:

document.querySelector('input[type="color"]').click();

Den tilnærmingen fungerer ikke på datoinndata, og det er derfor denne nye API-en ble lagt til. .showPicker() vil også fungere med farge- og filinndata, men det er ingen reell fordel å bruke det over .click().

Hva er nytt med skjemaer i 2022?

Inert attributt

Det har alltid vært mulig å deaktivere flere innganger samtidig ved å pakke dem inn i en HTML fieldset og deaktivere fieldset:

Inert er et nytt HTML-attributt. Det er ikke bare for skjemaer, men skjemaer er absolutt et viktig bruksområde. i motsetning til disabled Egenskap, inert kan brukes på en form selve elementet. Alt i skjemaet vil være ikke-fokuserbart og ikke-klikkbart. Når det gjelder hjelpeteknologier, inert ligner på innstilling aria-hidden="true". i motsetning til disabled Egenskap, inert bruker ingen styling som standard, men det er enkelt å legge til din egen:

form[inert] {
  opacity: .2;
}

Det kommer mer...

Den store er styling <select> elementer, noe utviklere har ønsket seg i flere tiår. Det ser ut til å endelig bli en realitet snart med introduksjonen av selectmenu.

Men det er det for nå! De siste oppdateringene gir full nettleserstøtte til funksjoner vi har ventet på, noe som gjør dem ideelle for produksjonsbruk.

Tidstempel:

Mer fra CSS triks