4.1 Element och händelser i formulär
I formulär kan man referera till de olika elementen med hjälp av deras name
-attribut. Finns det flera element med samma namn, blir de en array och man indexerar dem i referenserna. Det finns ett antal olika element (input
med olika type
-attribut, select
, och textarea
). Alla dessa har olika egenskaper för att komma åt innehåll och vad som är valt. De har också olika händelser, t.ex. att ett textfält är i fokus då användaren klickat i det. Detta exempel illustrerar en del händelser och hur man avläser elementens innehåll. Exemplet är uppdelat i tre delar:
- Exempel på olika element för input och val samt hur man avläser dem.
- Exempel på olika händelser som kan inträffa på formulärets element.
- Ett formulär för en lånekalkyl, där olika input-element och händelser används.
36 min.
Sammanfattning
- Referera till element i formuläret:
- För att referera till elementen i ett formulär, tar man först fram en referens till
form
-elementet, t.ex. med hjälp avquerySelector()
. Därefter kan man använda punktnotation och de namn som finns i elementensname
-attribut. Har man t.ex.<input name="myField" ...>
kan man skrivaformElem.myField.value
, för att först referera till variabeln med formuläret, sedan namnet påinput
-taggen och sedan egenskapen (i detta fallvalue
) som man vill komma åt. - Om flera element har samma namn, blir de en array. I referensen får man då indexera dem, t.ex.
formElm.myField[i].value
.
- För att referera till elementen i ett formulär, tar man först fram en referens till
- Avläsa elementens innehåll och val:
- För komma åt innehållet i ett textfält (även
input
-taggar medtype
satt tillemail
,date
, etc. samttextarea
-element) använder man egenskapenvalue
. Även om det inte finns någotvalue
-attribut i HTML-koden, kan man i JavaScript avläsavalue
. Man kan också lägga in nytt innehåll ivalue
. - Även för en meny kan man använda
value
, för att avläsa det val användaren gjort. Man refererar tillselect
-elementet och avläservalue
och får då innehållet i valtoption
-element. - För en meny kan man också använda
selectedIndex
, för att få index till valtoption
-element. Det går också lägga in ett nytt värde iselectedIndex
, för att ställa in menyn på det alternativet. Lägger man in 0, visas det första alternativet. - För kryssrutor och radioknapper (
input
medtype="checkbox"
ellertype="radio"
) använder man egenskapenchecked
, för att avgöra vilken som är vald. Man går då igenom dem i en loop och avläserchecked
för var och ett av elementen.
- För komma åt innehållet i ett textfält (även
- Händelser för elementen:
- För textfält (alla varianter) inträffar händelsen
focus
, då användaren kommer in i det (t.ex. genom att klicka i det eller gå till det med tab-tangenten). När man lämnar fältet, inträffar händelsenblur
. - För menyer brukar man använda händelsen
change
, som kopplas tillselect
-elementet. Händelsen inträffar då det görs ett nytt val i menyn. - För ett skjutreglage kan man också använda
change
, som inträffar när man släpper reglaget. Vill man känna av en händelse medan man drar i reglaget, använder man istället händelseninput
. - Då ett formulär skickas, inträffar händelsen
submit
. Denna händelse inträffar innan formuläret skickats, så man kan fånga upp den och göra en kontroll av formuläret. Vill man sedan förhindra att formuläret skickas, kan man användae.preventDefault()
.
- För textfält (alla varianter) inträffar händelsen
Egna övningar
Här följer ett förslag på några egna övningar. Öppna filen test.html och test.js och utför följande:
- Lägg till händelsehanterare på de båda textfälten, så att funktionen
selectText
anropas på händelsenfocus
och funktionencheckText
anropas på händelsenblur
. - Lägg också en händelsehanterare på knappen
calcBtn
, så att funktionencalculateArea
anropas på händelsenclick
. - I funktionen
calculateArea
avläser du de båda textfälten och sparar deras värden i variablernaa
ochb
. - Lägg också in
if
-satser för att kontrollera vilken av radioknapparna som är vald. I de olikaif
-satserna lägger du in de olika raderna för beräkning avarea
.