Avatar billede ravnkilde Nybegynder
03. december 2007 - 14:30 Der 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;
}

--- kode stop ---
Avatar billede di8leva Nybegynder
03. december 2007 - 14:53 #1
samme som http://www.eksperten.dk/spm/808696 ?

Det er samme svar :)
Avatar billede di8leva Nybegynder
03. december 2007 - 15:22 #2
Ok, nu kan jeg se at der er lidt forskel.

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;
}
Avatar billede ravnkilde Nybegynder
03. december 2007 - 15:45 #3
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?
Avatar billede di8leva Nybegynder
03. december 2007 - 15:55 #4
Hvis Attending = true betyder validere kun navn så skal det laves sådan her i stedet, en linie skal ändres:

var isAttending = !document.form.Attending[0].checked;
Avatar billede di8leva Nybegynder
03. december 2007 - 16:02 #5
hver if-sätning skal så indeholde

if(isAttending && ...)

hvis det bare skal udfyldes hvis brugeren skal vare med.... ok?

if(isAttending && isFilled(form.Mobilephone)==false) = valider mobilephone hvis bruger skal vare med

if(isFilled(form.Mobilephone)==false) = valider ALTID mobilephone
Avatar billede ravnkilde Nybegynder
03. december 2007 - 16:02 #6
Hvis Attending = true betyder det kun validere Firstname, Familyname, Function, Department, Country, Mobilephone og Email.

Er dit kodeforslag så fortsat gældende - eller???
Avatar billede di8leva Nybegynder
03. december 2007 - 16:19 #7
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;
}
Avatar billede di8leva Nybegynder
03. december 2007 - 16:20 #8
DOH!, den andre vej:

Hvis No-attending-boksen IKKE markeret valideres alt:

Hvis No-attending-boksen er markeret valideres kun:
firstname
familyname
function
department
country
mobile
Avatar billede ravnkilde Nybegynder
04. december 2007 - 14:36 #9
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;
}

--- kode stop ---
Avatar billede ravnkilde Nybegynder
04. december 2007 - 14:51 #10
di8leva: Sådan her ser boksen med Attending ud på form-siden:

<input name="Attending" type="checkbox" onClick="show(false,'div2');" value="NO">

Måske det har indflydelse på scriptet?
Avatar billede di8leva Nybegynder
04. december 2007 - 15:21 #11
Advarer den först, og submitter alligevel, eller er der ikke nogen advarsel?

hvordan ser din <form...> ud? Er der nogen onSubmit i den?
Avatar billede ravnkilde Nybegynder
04. december 2007 - 15:24 #12
Den advarer slet ikke!

<form action="data.asp" method="post" name="form" onSubmit="return isReady(this)">
Avatar billede di8leva Nybegynder
04. december 2007 - 15:46 #13
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>

<form action="data.asp" method="post" name="form" onSubmit="return isReady(this);">
    Firstname<input type="text" name="Firstname"><br>
    Familyname<input type="text" name="Familyname"><br>
    Function<input type="text" name="Function"><br>
    Department<input type="text" name="Department"><br>
    Country<input type="text" name="Country"><br>
    Mobilephone<input type="text" name="Mobilephone"><br>
    Email<input type="text" name="Email"><br>
    Nej<input type="checkbox" name="Attending"></br>
    RoomRequired Nej<input type="checkbox" name="RoomRequired"></br>
    RoomRequired Ja<input type="checkbox" name="RoomRequired"></br>
    Ryg ja<input type="checkbox" name="RoomPreference"></br>
    Ryg nej<input type="checkbox" name="RoomPreference"></br>
    DiateryRemarks ja<input type="checkbox" name="DiateryRemarks"></br>
    DiateryRemarks nej<input type="checkbox" name="DiateryRemarks"></br>
   
    <input type="submit">
</form>
</html>
Avatar billede ravnkilde Nybegynder
04. december 2007 - 16:10 #14
di8leva: jeg er lige på en anden opgave p.t., men kommer tilbage til dig. Glem mig ikke!
Avatar billede ravnkilde Nybegynder
04. december 2007 - 16:43 #15
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?

Sådan ser min værelses-del ud i formen:

<input name="RoomRequired" type="radio" value="Yes">
<span class="CheckBoxTxt">Yes</span>
<input name="RoomRequired" type="radio" value="No">
<span class="CheckBoxTxt">No</span>
Avatar billede di8leva Nybegynder
05. december 2007 - 10:26 #16
det er meget nemt....

Hvis 'Ja' er för 'Nej' betyder dette:

document.form.RoomRequired[0] = Ja
document.form.RoomRequired[1] = Nej

Så linien:
if(isAttending && !document.form.RoomRequired[0].checked)

skal bydes til:
if(isAttending && !document.form.RoomRequired[1].checked)
Avatar billede ravnkilde Nybegynder
05. december 2007 - 10:51 #17
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!
Avatar billede di8leva Nybegynder
05. december 2007 - 11:11 #18
Jeg har ikke nogle direkte links, jeg har en bog hjemme som jeg läst :) og bruger google til det som er kvar.

God jul
Avatar billede roenving Novice
06. december 2007 - 13:23 #19
-- 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 !-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester