Avatar billede CRavnkilde Nybegynder
23. september 2010 - 14:59 Der er 8 kommentarer og
1 løsning

Validering på Select box - koden virker ikke korrekt

Brugren promptes for valg i drop-down boks. Hvis brugeren vælger værdi 1 = Airplane, skal brugeren promptes for at udfylde de efterfølgende tre tilhørende felter (fra, via og flynr.). Hvis brugeren har valgt værdien 2 (Train) eller 3 (Car) skal brugeren bare fortsætte til den næste gruppe-validering.

Jeg har lavet en kode, som prompter brugeren for indtastning uanset hvilken værdi, brugeren har valgt.

Hvad har jeg gjort forkert i min kode?

--- kode start ---

// ARRIVAL BY
if(isAttending && form.ArrivalBy.value == "")
    {
    alert("Please select Travel mode");
    return false;
    }
    if(isAttending && !document.form.ArrivalBy.SelectedIndex=="1")
    {
    if(!isFilled(form.ArrivalFrom))
    {
    alert("Please fill in Arrival from");
    form.ArrivalFrom.focus();
    return false;
    }
    if(!isFilled(form.ArrivalVia))
    {
    alert("Please fill in Arrival via");
    form.ArrivalVia.focus();
    return false;
    }
    if(!isFilled(form.ArrivalFlightNo))
    {
    alert("Please fill in Flight No.");
    form.ArrivalFlightNo.focus();
    return false;
    }
}   

--- kode stop ---
Avatar billede Slettet bruger
23. september 2010 - 15:31 #1
Nok et ! for meget hist og her...

For overskuelighedens skyld sku' du ta' og splitte det op med en switch:

if (isAttending)
    switch (document.form.ArrivalBy.SelectedIndex)
        {
        case 1:
            check fly-felter..
            break;
        case 2:
            check tog-felter..
            break;
        case 3:
            check bil-felter..
            break;
        default:
            alert("Please select Travel mode");
            return false;
        }
Avatar billede CRavnkilde Nybegynder
23. september 2010 - 15:46 #2
Hmm, måske ja. Har ellers virket fint for mig indtil denne med selectedindex...
Avatar billede Slettet bruger
23. september 2010 - 15:56 #3
hov - skal være med lille s forrest (stort I) fik jeg lige øje på : )
- og så er det en integer, ikke en streng.
Avatar billede CRavnkilde Nybegynder
23. september 2010 - 16:08 #4
Tak. Ændrede til lille s = selectedIndex - men det virker fortsat ikke som det skal, sorry.
Avatar billede Slettet bruger
23. september 2010 - 19:42 #5
Så må vi se noget mere kode...
Avatar billede CRavnkilde Nybegynder
24. september 2010 - 09:10 #6
OK, her kommer hele koden:

// JavaScript Document
function isFilled(element)
{
    if(element.value=="")
    {
        return false;
    }
    else
    {
        return true;
    }
}
function isReady(form)
{
    var isAttending = !form.Attending.checked;
    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(isFilled(form.Firstname)==false)
    {
    alert("Please fill in First name.");
    form.Firstname.focus();
    return false;
    }
    if(isFilled(form.Lastname)==false)
    {
    alert("Please fill in Familiy name.");
    form.Lastname.focus();
    return false;
    }
    if(isFilled(form.Title)==false)
    {
    alert("Please fill in Title (position).");
    form.Title.focus();
    return false;
    }
    if(isFilled(form.Department)==false)
    {
    alert("Please fill in Department.");
    form.Department.focus();
    return false;
    }
    if(isFilled(form.Country)==false)
    {
    alert("Please select Nycomed country.");
    form.Country.focus();
    return false;
    }
    if(isFilled(form.Telephone)==false)
    {
    alert("Please fill in Telephone No. and include your country code, e.g. +45.");
    form.Telephone.focus();
    return false;
    }
    if(isFilled(form.Mobilephone)==false)
    {
    alert("Please fill in Mobile phone No. and include your country code, e.g. +45.");
    form.Mobilephone.focus();
    return false;
    }
    // PASSPORT
    if(isAttending && form.Name.value == "") {
    alert("Please fill in Full name (Passport)");
    form.Name.focus();
    return false;
    }
    if(isAttending && form.PNationality.value == "") {
    alert("Please fill in Nationality (Passport)");
    form.PNationality.focus();
    return false;
    }
    if(isAttending && form.Dateofbirth.value == "") {
    alert("Please fill in Date of birth (Passport)");
    form.Dateofbirth.focus();
    return false;
    }
    if(isAttending && form.Monthofbirth.value == "") {
    alert("Please fill in Month of birth (Passport)");
    form.Monthofbirth.focus();
    return false;
    }
    if(isAttending && form.Yearofbirth.value == "") {
    alert("Please fill in Year of birth (Passport)");
    form.Yearofbirth.focus();
    return false;
    }
    if(isAttending && form.Placeofbirth.value == "") {
    alert("Please fill in Placeofbirth (Passport)");
    form.Placeofbirth.focus();
    return false;
    }
    if(isAttending && form.PassportNo.value == "") {
    alert("Please fill in Passport No. (Passport)");
    form.PassportNo.focus();
    return false;
    }
    if(isAttending && form.Placeofissue.value == "") {
    alert("Please fill in Place of issue (Passport)");
    form.Placeofissue.focus();
    return false;
    }
    if(isAttending && form.Expiration.value == "") {
    alert("Please fill in Expiration date (Passport)");
    form.Expiration.focus();
    return false;
    }
    // ARRIVAL
    if(isAttending && !document.form.TransferToHotel[0].checked && !document.form.TransferToHotel[1].checked)
    {
    alert("Please select whether you need transport to the hotel.");
    return false;
    }
    if(isAttending && !document.form.TransferToHotel[1].checked)
    {
    if(!isFilled(form.thirdinput))
    {
    alert("Please fill in Arrival date");
    form.thirdinput.focus();
    return false;
    }
    if(!isFilled(form.ArrivalHour))
    {
    alert("Please fill in Arrival time (hour)");
    form.ArrivalHour.focus();
    return false;
    }
    if(!isFilled(form.ArrivalMinute))
    {
    alert("Please fill in Arrival time (minute)");
    form.ArrivalMinute.focus();
    return false;
    }
    }
    // ARRIVAL BY
    if(isAttending && form.ArrivalBy.value == "")
    {
    alert("Please select Travel mode");
    return false;
    }
    if(isAttending && !document.form.ArrivalBy.selectedIndex=="1")
    {
    if(!isFilled(form.ArrivalFrom))
    {
    alert("Please fill in Arrival from");
    form.ArrivalFrom.focus();
    return false;
    }
    if(!isFilled(form.ArrivalVia))
    {
    alert("Please fill in Arrival via");
    form.ArrivalVia.focus();
    return false;
    }
    if(!isFilled(form.ArrivalFlightNo))
    {
    alert("Please fill in Flight No.");
    form.ArrivalFlightNo.focus();
    return false;
    }
}   
    // DEPARTURE
    if(isAttending && !document.form.TransferToAirport[0].checked && !document.form.TransferToAirport[1].checked)
    {
    alert("Please select whether you need transport to the airport");
    return false;
    }
    if(isAttending && !document.form.TransferToAirport[1].checked)
    {
    if(!isFilled(form.fourthinput))
    {
    alert("Please fill in Departure date");
    form.fourthinput.focus();
    return false;
    }
    if(!isFilled(form.DepartureHour))
    {
    alert("Please fill in Departure time (hour)");
    form.DepartureHour.focus();
    return false;
    }
    if(!isFilled(form.DepartureMinute))
    {
    alert("Please fill in Departure time (minute)");
    form.DepartureMinute.focus();
    return false;
    }
    if(!isFilled(form.DepartureBy))
    {
    alert("Please select Departuring by");
    form.DepartureBy.focus();
    return false;
    }
    }
    // ROOM RESERVATION
    if(isAttending && !document.form.RoomRequired[0].checked && !document.form.RoomRequired[1].checked)
    {
    alert("Please select whether you need hotel room reservation");
    return false;
    }
    if(isAttending && !document.form.RoomRequired[1].checked)
    {
    if(!isFilled(form.firstinput))
    {
        alert("Please fill in Check-in date - and verify date referring to your arrival");
        form.firstinput.focus();
        return false;
    }
    if(!isFilled(form.secondinput))
    {
        alert("Please fill in Check-out date - and verify date referring to your departure");
        form.secondinput.focus();
        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 dietary preferences (Remarks)");
    return false;
    }
    // DIETARY
    if(isAttending && !document.form.DiateryRemarks[1].checked)
    {
  if(!isFilled(form.DiateryPreferences))
    {
        alert("Please fill in Dietary Preferences (Text)");
        form.DiateryPreferences.focus();
        return false;
    }
    }
    return true;
}
Avatar billede Slettet bruger
24. september 2010 - 16:47 #7
Nu siger du jo ikke HVAD der er galt... så jeg botaniserer lidt : )

Du sætter isAttending til true hvis feltet Attending IKKE er checked...?

isFilled() kan "snydes" ved blot at indtaste et mellemrum...

Forbedringsforslag:
Hjælpefunktion trim herunder fjerner evt foran- og efterstillede blanke/tabs fra strenge:

String.prototype.trim = function(){return this.replace(/^\s+|\s+$/g,"")}

function isFilled(element)
  {
  if (element.value.trim() == "")
        return false
  return true
  }

Og så burde du samle op på alle brugerfejl og fortælle "hele sandheden" på en gang, i stedet for at brugeren skal prøve at submitte igen og igen..


Ahh - Ved nærmere eftersyn, tror faktisk du har misforstået "!"
- det betyder "not"

Altså: if (!document.form.RoomRequired[0].checked)
= hvis IKKE RoomRequired er checked
Avatar billede CRavnkilde Nybegynder
27. september 2010 - 10:43 #8
Kigger på dit forslag.

Det der er galt, er at brugeren kun skal promptes for svar på Via og Flight No. hvis han/hun har fly som transportmiddel. Hvis det er tog eller bil, skal brugeren bare videre til næste indtastningsgruppe.
Avatar billede CRavnkilde Nybegynder
01. december 2010 - 21:44 #9
-
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