03. december 2007 - 14:30Der er
18 kommentarer og 1 løsning
Validering - check i forhold til brugerens valg
Jeg har nedenstående javascript kode, der validerer en form. Jeg har indsat en checkbox, hvor brugeren skal markere hvis han/hun ikke deltager. Hvis brugeren ikke deltager, fjernes/skjules den sidste del af formen (ikke nødvendigt med indtastning). Den del, der skjules vil jeg også gerne have at der ikke valideres for.
Kan jeg flette noget "if then" el. lign. i javascript-koden, der tager højde for brugerens valg i den checkbox, som hedder "Attending"? Jeg har markerei i koden hvor valideringen skal "skilles ad". Dvs. hvis ikke boksen er markeret skal hele formen valideres, medens at en afkrydsning, gør at formen kun valideres for Firstname til og med Email.
--- kode start ---
function isReady(form) { if(isFilled(form.Firstname)==false) { alert("Please fill in your First name"); form.Firstname.focus(); return false; } if(isFilled(form.Familyname)==false) { alert("Please fill in your Family Name"); form.Familyname.focus(); return false; } if(isFilled(form.Function)==false) { alert("Please fill in your Function"); form.Function.focus(); return false; } if(isFilled(form.Department)==false) { alert("Please fill in your Department"); form.Department.focus(); return false; } if(isFilled(form.Country)==false) { alert("Please fill in Nycomed country"); form.Country.focus(); return false; } if(isFilled(form.Mobilephone)==false) { alert("Please fill in your Mobile phone No. and include your country code, e.g. +45"); form.Mobilephone.focus(); return false; } if (!form.Email.value.match(/^.*@\w[\w\.-]*\.[a-z]{2,6}$/)){ alert("Invalid E-mail address! Please re-enter."); form.Email.focus(); return false; } if(!document.form.RoomRequired[0].checked && !document.form.RoomRequired[1].checked) { alert("Please select whether you need hotel room reservation. If yes, verify check-in and check-out dates referring to your arrival and departure."); return false; } if(!document.form.RoomPreference[0].checked && !document.form.RoomPreference[1].checked) { alert("Please select whether you have any room preferences (Smoking or Non-smoking)"); return false; } if(!document.form.DiateryRemarks[0].checked && !document.form.DiateryRemarks[1].checked) { alert("Please select whether you have any diatery preferences (Remarks). If yes, please type in your remarks as text (Text)."); return false; } return true; }
Pröv med dette: (hvis checkboksen heder "Attending") du kan nok nemt se hvordan jeg gjort det, og tilpasse hvor du vil validere hvis brugeren er "attending"
function isReady(form) { var isAttending = document.form.Attending[0].checked; if(isFilled(form.Firstname)==false) { alert("Please fill in your First name"); form.Firstname.focus(); return false; } if(isAttending && isFilled(form.Familyname)==false) { alert("Please fill in your Family Name"); form.Familyname.focus(); return false; } if(isAttending && isFilled(form.Function)==false) { alert("Please fill in your Function"); form.Function.focus(); return false; } if(isAttending && isFilled(form.Department)==false) { alert("Please fill in your Department"); form.Department.focus(); return false; } if(isAttending && isFilled(form.Country)==false) { alert("Please fill in Nycomed country"); form.Country.focus(); return false; } if(isAttending && isFilled(form.Mobilephone)==false) { alert("Please fill in your Mobile phone No. and include your country code, e.g. +45"); form.Mobilephone.focus(); return false; } if (isAttending && !form.Email.value.match(/^.*@\w[\w\.-]*\.[a-z]{2,6}$/)){ alert("Invalid E-mail address! Please re-enter."); form.Email.focus(); return false; } if(isAttending && !document.form.RoomRequired[0].checked && !document.form.RoomRequired[1].checked) { alert("Please select whether you need hotel room reservation. If yes, verify check-in and check-out dates referring to your arrival and departure."); return false; } if(isAttending && !document.form.RoomPreference[0].checked && !document.form.RoomPreference[1].checked) { alert("Please select whether you have any room preferences (Smoking or Non-smoking)"); return false; } if(isAttending && !document.form.DiateryRemarks[0].checked && !document.form.DiateryRemarks[1].checked) { alert("Please select whether you have any diatery preferences (Remarks). If yes, please type in your remarks as text (Text)."); return false; } return true; }
di8leva: lige for forklare opbygningen igen: Checkboksen, der hedder "Attending", er faktisk kun til brug, hvis brugeren IKKE deltager. I princippet har den værdi No-attending. Hvis den markeres, skal brugeren fortsat udfylde navn, stilling, etc. til og e-mail adresse. Resten af formen skal ikke valideres. Den skjules også automatisk i samme øjeblik, som brugeren markere boksen. Passer dit forslag så stadigvæk?
Hmm... jeg trodde at du selv kunde finde ud hvor du skule bruge 'isAttending', så lär du også noget til näste gang :) Men her er en gyldig kod som jeg har opfattet problemet:
Hvis No-attending-boksen er markeret valideres alt:
Hvis No-attending-boksen IKKE er markeret valideres kun: firstname familyname function department country mobile
function isReady(form) { var isAttending = !document.form.Attending[0].checked; if(isFilled(form.Firstname)==false) { alert("Please fill in your First name"); form.Firstname.focus(); return false; } if(isFilled(form.Familyname)==false) { alert("Please fill in your Family Name"); form.Familyname.focus(); return false; } if(isFilled(form.Function)==false) { alert("Please fill in your Function"); form.Function.focus(); return false; } if(isFilled(form.Department)==false) { alert("Please fill in your Department"); form.Department.focus(); return false; } if(isFilled(form.Country)==false) { alert("Please fill in Nycomed country"); form.Country.focus(); return false; } if(isFilled(form.Mobilephone)==false) { alert("Please fill in your Mobile phone No. and include your country code, e.g. +45"); form.Mobilephone.focus(); return false; } if (isAttending && !form.Email.value.match(/^.*@\w[\w\.-]*\.[a-z]{2,6}$/)){ alert("Invalid E-mail address! Please re-enter."); form.Email.focus(); return false; } if(isAttending && !document.form.RoomRequired[0].checked && !document.form.RoomRequired[1].checked) { alert("Please select whether you need hotel room reservation. If yes, verify check-in and check-out dates referring to your arrival and departure."); return false; } if(isAttending && !document.form.RoomPreference[0].checked && !document.form.RoomPreference[1].checked) { alert("Please select whether you have any room preferences (Smoking or Non-smoking)"); return false; } if(isAttending && !document.form.DiateryRemarks[0].checked && !document.form.DiateryRemarks[1].checked) { alert("Please select whether you have any diatery preferences (Remarks). If yes, please type in your remarks as text (Text)."); return false; } return true; }
hej igen di8leva. Undskyld at jeg først er tilbage nu. Jeg har afprøvet dit forslag, men jeg kan submitte siden uden nogen som helst indtastninger!
Jeg har implementeret den del fra mit andet spørgsmål (værelse og ryger/ikkeryger) i din kode. Men jeg tror ikke fejlen er der.
Som du skriver til sidst, hvis No-attending boksen er markeret, skal kun Firstname, Familyname, Function, Department, Country, Mobilephone og Email valideres. Hvis boksen er blank, skal alt valideres.
Jeg håber jeg kan overtale dig til at kigge koden igennem for at se om der skulle være fejl - jeg kan ikke fremprovokere dem. Ligesom jeg kan submitte uden indtastninger.
--- start kode ---
function isFilled(element) { if(element.value=="") { return false; } else { return true; } } function isReady(form) { var isAttending = !document.form.Attending[0].checked; if(isFilled(form.Firstname)==false) { alert("Please fill in your First name"); form.Firstname.focus(); return false; } if(isFilled(form.Familyname)==false) { alert("Please fill in your Family Name"); form.Familyname.focus(); return false; } if(isFilled(form.Function)==false) { alert("Please fill in your Function"); form.Function.focus(); return false; } if(isFilled(form.Department)==false) { alert("Please fill in your Department"); form.Department.focus(); return false; } if(isFilled(form.Country)==false) { alert("Please fill in Nycomed country"); form.Country.focus(); return false; } if(isFilled(form.Mobilephone)==false) { alert("Please fill in your Mobile phone No. and include your country code, e.g. +45"); form.Mobilephone.focus(); return false; } if (isFilled(form.Email.value.match(/^.*@\w[\w\.-]*\.[a-z]{2,6}$/)){ alert("Invalid E-mail address! Please re-enter."); form.Email.focus(); return false; } if(isAttending && !document.form.RoomRequired[0].checked && !document.form.RoomRequired[1].checked) { alert("Please select whether you need hotel room reservation. If yes, verify check-in and check-out dates referring to your arrival and departure."); return false; } if(isAttending && !document.form.RoomRequired[0].checked) { if(isAttending && !document.form.RoomPreference[0].checked && !document.form.RoomPreference[1].checked) { alert("Please select whether you have any room preferences (Smoking or Non-smoking)"); return false; } } if(isAttending && !document.form.DiateryRemarks[0].checked && !document.form.DiateryRemarks[1].checked) { alert("Please select whether you have any diatery preferences (Remarks). If yes, please type in your remarks as text (Text)."); return false; } return true; }
Ok.... nu har jeg tilpasset den, og prövet den.... her er noget som virker :)
Inklusive HTML-elementer så du ser hvordan de skal se ud :)
<html> <script language="JavaScript" type="text/JavaScript"> function isFilled(element) { if(element.value=="") { return false; } else { return true; } } function isReady(form) { var isAttending = !form.Attending.checked; if(isFilled(form.Firstname)==false) { alert("Please fill in your First name"); form.Firstname.focus(); return false; } if(isFilled(form.Familyname)==false) { alert("Please fill in your Family Name"); form.Familyname.focus(); return false; } if(isFilled(form.Function)==false) { alert("Please fill in your Function"); form.Function.focus(); return false; } if(isFilled(form.Department)==false) { alert("Please fill in your Department"); form.Department.focus(); return false; } if(isFilled(form.Country)==false) { alert("Please fill in Nycomed country"); form.Country.focus(); return false; } if(isFilled(form.Mobilephone)==false) { alert("Please fill in your Mobile phone No. and include your country code, e.g. +45"); form.Mobilephone.focus(); return false; } if (!form.Email.value.match(/^.*@\w[\w\.-]*\.[a-z]{2,6}$/)) { alert("Invalid E-mail address! Please re-enter."); form.Email.focus(); return false; } if(isAttending && !document.form.RoomRequired[0].checked && !document.form.RoomRequired[1].checked) { alert("Please select whether you need hotel room reservation. If yes, verify check-in and check-out dates referring to your arrival and departure."); return false; } if(isAttending && !document.form.RoomRequired[0].checked) { if(isAttending && !document.form.RoomPreference[0].checked && !document.form.RoomPreference[1].checked) { alert("Please select whether you have any room preferences (Smoking or Non-smoking)"); return false; } } if(isAttending && !document.form.DiateryRemarks[0].checked && !document.form.DiateryRemarks[1].checked) { alert("Please select whether you have any diatery preferences (Remarks). If yes, please type in your remarks as text (Text)."); return false; } return true; } </script>
di8leva: Det virker meget bedre, MEN jeg har fundet ud af, hvis RoomRequired opstilles med Ja som den første boks og Nej som næste boks, så bliver man fortsat prompted for valg af ryger/ikkeryger, hvis man har valgt ingen værelse (No RoomRequired). Kan det løses på en måde, da jeg foretrækker at have ja-boksen før nej-boksen?
di8leva: Super. Takker. Du kan godt se at jeg ikke er nogen "ørn" til Javascript ;-) Har du nogle gode links/referencer omkring Javascript (primært validering)? God jul!
-- og så kan du få god vejledning ved at søge her i kategorien, for der er stillet enormt mange spørgsmål om validering, da det er en af de meget praktiske ting, javascript ofte bruges til !-)
Synes godt om
Ny brugerNybegynder
Din løsning...
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.