Validering af to input - radiobutton og list kombineret
Hejsa. Jeg har en tilmeldingsformular, hvor jeg skal sikre mig, at hvis brugerne svarer "ja" til at deltge, så vælger de også noget på en liste (i dette tilfælde nogle busafgange). Det må altså ikke være muligt at svare "ja" til at deltage, uden at vælge en bus afgang.
Mit javascript ser sådan her ud:
<script type="text/javascript"> function verify(){ var f = document.getElementById("siemens"); var fejlBesked; var ingenVaerdi;
if (fejlBesked == undefined) { // Tjek stamdata if (f.firstname.value == "") { fejlBesked = "Please state your 'first name'"; } else if (f.surname.value == "") { fejlBesked = "Please State your 'surname'"; }
else if (f.em_no.value == "") { fejlBesked = "Please fil in 'Employee no.'"; }
else if (f.ud.value ="yes" && (f.udstation.value == '')) { fejlBesked = "Please choose your station for bus to MCH"; } else if (f.hjem.value ="yes" && (f.hjem_station.value == '')) { fejlBesked = "Please choose your station for bus from MCH"; }
Men som det ser ud nu, er javascriptet bedøvende ligeglad med, om man vælger noget på listen eller ej. Den sender bare ukritisk afsted. Jeg har prøvet forskellige varianter af valideringen af listen (SelectIndex == 0, og brug af "" rundt omden tomme værdi i stedet for '') men intet virker.
Personligt fatter jeg en pind af alt det du lige har skrevet. Din html og din javascript koblet sammen i dette spørgsmål give ikke mening overhovedet!!!!!!!!!
Din javascript arbejder med et element der skal have id "siemens", men din html har et element med id "udstation_liste".
Der er gået 2t og 30m siden du oprettede de tilsyneladende simple spørgsmål, men at ingen har kommenteret tråden kan kun betyde andre har tænkt præcis som mig. "WHAAAAAAAT?"???"
Som oftest er spørgeren den, der ved mindst om, hvilken del af koden som er 'interessant'. Det gælder vist også i dette spørgsmål. Jeg tror, du bliver nødt til at paste mere kode - eller endnu bedre, lægge et link =)
@kalp: Ingen grund til at råbe. Jeg har ikke jo stillet spørgsmålet for at genere dig :-) Jeg medtog den mængde kode, jeg mente var passende, men jeg kan godt se, at jeg mangler noget, når man ikke kender resten som jeg :-)
@tjens: Den øvrige del af valideringen virker fint. Det er kun kombinationen af de to sæt radiobuttons og lister, der giver problemer.
Er det til at forstå, hvad mit problem er? Dybest set har jeg to spørgsmål, jeg gerne vil have besvaret i min formular.
1. Vil brugeren med en bus den ene vej, og hvis ja, hvor fra så? 2. Vil brugeren med en bus den anden vej, og hvis ja, hvor til så?
Svarer de ja, på de to bus-spørgsmål, skal de tvinges til at vælge en station. Bus-spørgssmålet er radiobuttons, mens stationsspørgsmålet er lists.
Sig til, hvis jeg snakker sort :-)
Jeg smider lige hele koden. Jeg vil være ked af at linke.
<script type="text/javascript"> function verify(){ var f = document.getElementById("siemens"); var fejlBesked; var ingenVaerdi;
if (fejlBesked == undefined) { // Tjek stamdata if (f.firstname.value == "") { fejlBesked = "Please state your 'first name'"; } else if (f.surname.value == "") { fejlBesked = "Please State your 'surname'"; }
else if (f.em_no.value == "") { fejlBesked = "Please fil in 'Employee no.'"; }
else if (f.ud.value ="yes" && (f.udstation.value == '')) { fejlBesked = "Please choose your station for bus to MCH"; } else if (f.hjem.value ="yes" && (f.hjem_station.value == '')) { fejlBesked = "Please choose your station for bus from MCH"; }
Jeg tror måske lige, jeg selv fandt fejlen. Jeg havde i valideringen skrevet listernes "name" i stedet for "id". Det var jo fjollet. Men skal de to ting egentlig helst være det samme?
I må meget gerne kigge på koden alligevel og give et praj om, om det er forældet måde at validere på. Det er noget gammel kode jeg har overtaget fra en kollega, og jeg kunne godt snart tænke mig at starte lidt forfra med valideringen.
Funktionen startes med at hente en reference til formen, den er så unødvendig ...
-- derefter testes om en netop oprettet variabel er undefined, hvilket den selvfølgelig vil være, altså overflødigt ...
-- derefter bruges en masse if else-ting, det kan reduceres til at man bare afbryder udførelsen, og stopper afsendelsen ...
-- og så vil det være hensigtsmæssigt at henlede brugerens opmærksomhed på det felt, der indeholder fejlen ..
-- og radios får man fat i som et array (hrm, collection vel), og de skal så behandles som sådan ...
-- så kommer funktionen til at se således ud:
<script type="text/javascript"> function verify(f){ // Tjek stamdata if (f.firstname.value == "") { alert("Please state your 'first name'"); f.firstname.focus(); return false; } if (f.surname.value == "") { alert("Please State your 'surname'"); f.surname.focus(); return false; } if (f.em_no.value == "") { alert("Please fill in 'Employee no.'"); f.em_no.focus(); return false; } //check konsistens med bus var radio = f.ud; if (radio[0].checked && f.udstation.selectedIndex == 0) { alert("Please choose your station for bus to MCH"); f.udstation.focus(); } radio = f.hjem; if (radio[0].checked && f.hjem_station.selectedIndex == 0) { alert("Please choose your station for bus from MCH"); f.hjem_station.focus(); return false; } return true; </script>
-- noget helt andet er, at det i nogen situationer (f.eks. med _meget_ lange formularer) kan være hensigtsmæssigt at samle fejlbeskeder sammen, så brugeren med det samme får et overblik over evt. fejl, men det ser ikke ud til at det er aktuelt her !-)
Jeg råber skam ikke:) og i øvrigt så skriver du helt korrekt "men jeg kan godt se, at jeg mangler noget, når man ikke kender resten som jeg :-)". Vi er nemlig ikke synske herinde (i hvertfald ikke mig desværre). Det er dog lykkedes og placere nok information i din tråd hvilket var hensigten med min kommentar;) Som du kan se er der kommet flere forslag til dig nu:)
Ups, så skal vi selvfølgelig gøre knappen til en submit, så det også virker i IE (de andre browsere opfatter nemlig _alle_ buttons (input type=submit, type=button og button) bortset fra reset-knapper som submit-knapper !-)
@tjens: Jeg opdagede også det med den ikke-eksisterende value på radio-buttons. :-)
@roenvig: Super godt indlæg med masser af stof, som jeg kan bruge til at få startet på en frisk. et er altid lettere at forstå kode, når man selv har haft fingrene i det fra starten. Når det er noget man overtager fra en kollega, kan det være svært at se sammenhængene, også selvom det er forholdsvist ukompliceret som dette (for mig er det rigeligt kompliceret :-).
@kalp: Mine cyberører reagerede bare på de mange udråbstegn :-)
Vil alle dem, der mener de har fortjent point, smide et svar, så fordeler jeg.
Tusind tak for hjælpen. Endnu engang viser eksperten sig som et eminemt sted at søge hjælp.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.