Avatar billede jriff Nybegynder
11. september 2004 - 17:28 Der er 26 kommentarer og
1 løsning

Check alle spørgsmål besvaret

Hej Alle!

Jeg har en ASP-side, som genererer en liste med spørgsmål ud fra en database. Disse spørgsmål kan besvares med radio, combobox, checkbox eller text-felt. Der kan være flere af alle disse på en side. Jeg har brug for noget java-script, som løber alle disse igennem og sikrer at de alle er besvarede inden submit (onsubmit='check(this)')

Det er fint nok at der bare kommer en alert("Udfyld alle spørgsmål").

På forhånd tak for hjælpen!
Avatar billede olebole Juniormester
11. september 2004 - 17:56 #1
<ole>

... kode?

/mvh
</bole>
Avatar billede jriff Nybegynder
11. september 2004 - 18:23 #2
Kode? Ja... :-)

<form action='sale?id=7' method='post'>
<tr><td>&nbsp;</td></tr>
<tr><td class='varespacer'><b>Spørgsmål 1</b><td></tr>
<tr>
<td>
<input type=radio name=1 value='Ja'> Ja
<input type=radio name=1 value='Nej'> Nej
<input type=radio name=1 value='Ved ikke'> Ved ikke
</td>
<tr><td class='varespacer'>&nbsp;</td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td class='varespacer'><b>Spørgsmål 2</b><td></tr>
<tr>
<td>
<select name=2>
<option value='Ja'> Ja
<option value='Nej'> Nej
<option value='Ved ikke'> Ved ikke
</td>
<tr><td class='varespacer'>&nbsp;</td></tr>
</tr>
<tr><td>&nbsp;</td></tr><tr><td><input type=submit value='Send'></td></tr>
</form>



Der kan være mange forskellige spørgsmål - også checkboxe og text-felter.
Avatar billede superdude Nybegynder
11. september 2004 - 18:24 #3
Prøv om du kan bruge denne:

<script type="text/javascript">

function formNotComplete(msg)
{
    alert("Udfyld alle felter...\nDu mangler at udfylde:\n" + msg);
    return false;
}

function isGroupChecked(g)
{
    var index = 0;
    var isChecked = false;
    while(!isChecked && index<g.length)
    {
        if(g[index].checked)
            isChecked = true;
        else
            index++;
    }
    return isChecked;
}

function check(f)
{
    if(!isGroupChecked(f.radiobuttons))
        return formNotComplete("Radiobuttons");
    if(!isGroupChecked(f.checkboxes))
        return formNotComplete("Checkboxes");
    if(f.combobox.value.length < 1)
        return formNotComplete("Combobox");
    if(f.tekstfelt.value.length < 1)
        return formNotComplete("Tekstfelt");
    return true;
}

</script>
Avatar billede superdude Nybegynder
11. september 2004 - 18:25 #4
Har ikke lige taget højde for dine feltnavne i eksemplet...
Avatar billede jriff Nybegynder
11. september 2004 - 18:28 #5
superdude> Jeg er et fjols til javascript! :-) Går dit eksempel ALLE radiobuttons igennem på hele siden, eller hvordan?

Og hvad mener du med at du ikke har taget højde for feltnavne?
Avatar billede superdude Nybegynder
11. september 2004 - 18:39 #6
Nej mit script går kun den radio-button gruppe igennem der hedder "radiobuttons".

Du har kaldt din radiogruppe for 1 (hvilket jeg er i tvivl om er et gyldigt navn - skal vist starte med et bogstav) så du skal kalde:

if(!isGroupChecked(f.1))
        return formNotComplete("Radiobuttons gruppe 1");

Hvis du så har en anden radiobutton-gruppe du har kaldt mads skal du igen skrive:

if(!isGroupChecked(f.mads))
        return formNotComplete("Radiobuttons gruppe mads");
Avatar billede superdude Nybegynder
11. september 2004 - 18:41 #7
Her er HTML'en der passer til mit eksempel, for at få en bedre forståelse:

<form onsubmit="return check(this)">
<input type="text" name="tekstfelt">
<input type="radio" name="radiobuttons" value="a">
<input type="radio" name="radiobuttons" value="b">
<input type="checkbox" name="checkboxes" value="a">
<input type="checkbox" name="checkboxes" value="b">
<select multiple name="combobox">
<option value="a">a
<option value="b">b
<input type="submit">
</select>
</form>
Avatar billede jriff Nybegynder
11. september 2004 - 18:41 #8
Øv... det er ikke så godt, for spørgsmålene bliver genereret dynamisk ud fra en database... kan man slet ikke lave noget der bare går det hele igennem automatisk? Noget hvor den selv finder ud af hvilke grupper der er og så checker dem?
Avatar billede superdude Nybegynder
11. september 2004 - 18:46 #9
Hmm udfordrende... ;-)

Jo det kan man vel. Tror jeg har en idé. 2 minutter...
Avatar billede jriff Nybegynder
11. september 2004 - 18:48 #10
Sejt :-)
Avatar billede olebole Juniormester
11. september 2004 - 18:51 #11
jriff >> Der er en del HTML-fejl i dit eksempel - og den select er det jo umuligt at validere. Er det meningen, at select'en også skal valideres?
Avatar billede jriff Nybegynder
11. september 2004 - 18:52 #12
olebole> Nej... select skal ikke valideres... den vil altid være udfyldt.
Avatar billede jriff Nybegynder
11. september 2004 - 18:54 #13
Ved I forresten hvordan man fra ASP parser en værdi til en SQL-forespørgsel i en Access-DB? I ved... når man laver et query kan man skrive [noget] som variabel, og så kommer den op og beder om en værdi. Det er denne værdi jeg gerne vil føre fra ASP over i forespørgslen.

Bare hvis I lige ved det :-)
Avatar billede olebole Juniormester
11. september 2004 - 19:06 #14
Okay ... så må du gerne fortælle præcis, hvilke felter, du vil have valideret. Er der andre end radios, checkboxes og textfelter?
Avatar billede jriff Nybegynder
11. september 2004 - 19:09 #15
Nej... det er der ikke. Altså textfelter er også textareas, så det er radio, checkbox, text og textarea.
Avatar billede olebole Juniormester
11. september 2004 - 19:19 #16
<script type="text/JavaScript">
function checkForm(f) {
    var e, gr, grChecked=false;
    for ( i=0; i<f.length; i++ ) {
        e = f.elements[i];
        if ( e.className.indexOf("validate")!=-1 ) {
            if ( e.tagName.toLowerCase()=="input" && (e.type.toLowerCase()=="radio" || e.type.toLowerCase()=="checkbox") ) {
                grChecked = false;
                gr = f[e.name];
                for ( j=0; j<gr.length; j++ ) {
                    if ( gr[j].checked==true ) {
                        grChecked = true;
                        break;
                    }
                }
                if ( !grChecked ) {
                    alert( "Alle felter skal udfyldes" );
                    return false;
                }
                grChecked = false;
            }
            if ( e.tagName.toLowerCase()=="input" && e.type.toLowerCase()=="text" ) {
                if ( e.value=="" ) {
                    alert( "Alle felter skal udfyldes" );
                    e.focus();
                    return false;
                }
            }
            if ( e.tagName.toLowerCase()=="textarea" ) {
                if ( e.value=="" ) {
                    alert( "Alle felter skal udfyldes" );
                    e.focus();
                    return false;
                }
            }
        }
    }
}
</script>

<form action='sale?id=7' method='post' onsubmit="return checkForm(this)">
<table cellspacing="0" cellpadding="0" border="0">
    <tr><td>&nbsp;</td></tr>
    <tr><td class='varespacer'><b>Spørgsmål 1</b><td></tr>
    <tr>
        <td>
        <input class="validate" type=radio name="r1" value='Ja'> Ja
        <input class="validate" type=radio name="r1" value='Nej'> Nej
        <input class="validate" type=radio name="r1" value='Ved ikke'> Ved ikke</td>
    </tr>
    <tr>
        <td><input class="validate" type="text"></td>
    </tr>
    <tr>
        <td><textarea class="validate"></textarea></td>
    </tr>
    <tr>
        <td>
        <input class="validate" type=checkbox name="c1" value='Ja'> Ja
        <input class="validate" type=checkbox name="c1" value='Nej'> Nej
        <input class="validate" type=checkbox name="c1" value='Ved ikke'> Ved ikke</td>
    </tr>
    <tr><td class='varespacer'>&nbsp;</td></tr>
    <tr><td>&nbsp;</td></tr>
    <tr><td class='varespacer'><b>Spørgsmål 2</b><td></tr>
    <tr>
        <td>
        <select name=s2>
        <option value='Ja'> Ja </option>
        <option value='Nej'> Nej </option>
        <option value='Ved ikke'> Ved ikke</td>
    </tr>
    <tr><td class='varespacer'>&nbsp;</td></tr>
    <tr><td>&nbsp;</td></tr>
    <tr><td><input type=submit value='Send'></td></tr>
</table>
</form>
Avatar billede superdude Nybegynder
11. september 2004 - 19:21 #17
Du er for sej olebole - jeg gav op...
Avatar billede olebole Juniormester
11. september 2004 - 19:24 #18
Alle felter, der skal valideres, skal have klassen 'validate'. Så kan du også have felter og inputs, der ikke skal valideres. Har du brug for at tildele dem en klasse af hensyn til udseende, kan du bare extend'e klassen: class="validate enExtraKlasse".

Læg mærke til, du ikke må anbringe form-tags mellem <tr> og </tr> - eller andre besynderlige steder. Anbring dem udenom formen. Giv evt. formen style="display:inline", hvis det er af hensyn til layout, du har gjort det  :)

Undlad derudover at give dine elementer navne, der begynder med et tal ... de bør begynde med et bogstav.
Så er det god kodeskik at afslutte alle tags, der kan afsluttes. Det gælder også <option>  ;o)
/mvh
Avatar billede olebole Juniormester
11. september 2004 - 19:25 #19
Baahhh ... den tager vi lige igen:
Læg mærke til, du ikke må anbringe form-tags mellem <tr> og </tr> - eller andre besynderlige steder. Anbring dem udenom TABELLEN. Giv evt. formen style="display:inline", hvis det er af hensyn til layout, du har gjort det  :)
Avatar billede jriff Nybegynder
11. september 2004 - 19:26 #20
Det virker fint! Virkelig flot lavet! TUSIND tak! Du har gjort mig meget glad :-) Smid lige et svar!
Avatar billede olebole Juniormester
11. september 2004 - 19:26 #21
PS: Husk i øvrigt også at afslutte dine <tr>'er  ;o)
Avatar billede jriff Nybegynder
11. september 2004 - 19:27 #22
Det virker ellers fint med kun et tal, og på den måde kan jeg bruge det direkte som ID til at gemme svar med...
Avatar billede olebole Juniormester
11. september 2004 - 19:29 #23
Jeg gentager: Du må _ikke_ bruge tal. Det er imod HTML-standarden - og validerings-scriptet virker ikke, da JavaScript ikke vil acceptere din fejl  :)
Avatar billede jriff Nybegynder
11. september 2004 - 19:29 #24
Hvorfor virker din kode ikke når det kun er et tal?
Avatar billede jriff Nybegynder
11. september 2004 - 19:30 #25
Ok... der kom svaret før jeg stillede spørgsmålet :-)
Avatar billede olebole Juniormester
11. september 2004 - 19:37 #26
Hehe ... du får problemer mange steder, at bryde standarderne. Det er ikke vanskeligere at skrive 'c2' end '2' - og i ASP er det jo heller ikke noget problem. Noget à la:

<%
    variabel = Mid(variabel, 2)
%>
Avatar billede olebole Juniormester
11. september 2004 - 19:38 #27
Nåja ... og så svaret  :)

... og superdude >> Tak for rosen  ;o)
/mvh
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