Avatar billede svjensen Nybegynder
18. november 2003 - 12:53 Der er 4 kommentarer og
1 løsning

Strukturering af formelementer og efterfølgende validering.

Jeg arbejder på et databaseadministrationssystem i asp.
Som en del af systemet skal brugeren kunne oprette tabeller.
I step 1 angiver han navnet og antal felter.
Antallet af felter bruges til at generere en form indholdende et antal rækker - svarende til antal felter - med fire input felter pr. række samt en radiobotton.

Mit script ser p.t. således ud:

**** START ****
<script language="javascript">
function Valider(minform2) {
    ret = false;
    for(i=0;window.document.minform2.rdokey.length>i;i++){
        if (window.document.minform2.rdokey[i].checked){
            ret = true;
        }
    }
    if (ret == false){
        alert("Du skal vælge en primær nøgle!");
    }
    return ret;           
}
</script>

<h1>Opret tabellen: <%=request.form("txttabelnavn")%></h1>
Du skal angive parametrene for de enkelte felter.<br><br>
<table>
<form method=post name=minform2 action=tabel.asp?action=new&step=3 onsubmit="return Valider(this);">
    <input type=hidden name=varTabel value=<%=request.form("txttabelnavn")%>>
    <input type=hidden name=varAntalfelter value=<%=request.form("txtantalfelter")%>>
    <tr><th>Feltnavn</th><th>Data type</th><th>Feltstørrelse</th><th>Auto increment</th><th>Primær nøgle</th></tr>
<%    step = int(request.form("txtantalfelter"))
    For i = 1 To step%>
        <tr>
            <td align=center><input type=text name="navn_<%=i%>" size=10></td>
            <td align=center>
                <select name=type_<%=i%>>
                    <option value="" selected></option>
                    <option value="int">INT</option>
                    <option value="varchar">Varchar (Husk størrelse)</option>
                    <option value="datetime">Datetime (yyyymmdd)</option>
                </select>
            </td>
            <td align=center><input type=text name="length_<%=i%>" size=10></td>
            <td align=center>
                <select name=auto_<%=i%>>
                    <option value="nej" selected>Nej</option>
                    <option value="ja">Ja</option>
                </select>
            </td>
            <td align=center><input type=radio name="rdokey" value=<%=i%>></td>
        </tr>
<%    next%>
    <tr><td align=center><input type=submit value="Opret"></td></tr>
</form>
</table>
**** SLUT ****

Mit spørgsmål går på om jeg kan anvende den nuværende struktur til den efterfølgende validering (se nedenfor) eller om jeg skal ændre i navngivningen af input-felterne.

Jeg ønsker at validere på følgende:
- Valg af radiobotton: en knap skal være valgt. VIRKER.
- Alle 'navn_x' felter skal være udfyldt.
- Alle 'type_x' dropdown menuer skal være <> "".
Og lidt andre småting, som jeg regner med selv at kunne lave.
Avatar billede svjensen Nybegynder
18. november 2003 - 12:58 #1
Grunden til navngivningen (med et nummer i enden) er, at jeg i næste skridt pakker data i et array på baggrund af rækkenummeret. Arrayet bruger jeg til at konstruere min sql query.
Avatar billede roenving Novice
18. november 2003 - 13:05 #2
Sådan måske:

<script language="javascript">
function Valider(f) {
    ret = false;
    for(i=0;f.rdokey.length>i;i++){
        if (f.rdokey[i].checked){
            ret = true;
        }
    }
    if (ret == false){
        alert("Du skal vælge en primær nøgle!");
        return ret;
    }
    for(i=0;f.elements.length>i;i++){
        fld = f.elements[i]
        if(fld.name.indexOf('name_')==0&&fld.value==""){
            alert('Du skal udfylde navnet i ' + fld.name.substring(5) + '. række!');
            f.focus();
            return false;
        }
        if(fld.name.indexOf('type_')==0&&fld.value==""){
            alert('Du skal vælge type i ' + fld.name.substring(5) + '. række!');
            f.focus();
            return false;
        }
       
    }

}
</script>

<h1>Opret tabellen: <%=request.form("txttabelnavn")%></h1>
Du skal angive parametrene for de enkelte felter.<br><br>
<form method=post name=minform2 action=tabel.asp?action=new&step=3 onsubmit="return Valider(this);">
    <input type=hidden name=varTabel value=<%=request.form("txttabelnavn")%>>
    <input type=hidden name=varAntalfelter value=<%=request.form("txtantalfelter")%>>
<table>
    <tr><th>Feltnavn</th><th>Data type</th><th>Feltstørrelse</th><th>Auto increment</th><th>Primær nøgle</th></tr>
<%    step = int(request.form("txtantalfelter"))
    For i = 1 To step %>
        <tr>
            <td align=center><input type=text name="navn_<%=i%>" size=10></td>
            <td align=center>
                <select name=type_<%=i%>>
                    <option value="" selected></option>
                    <option value="int">INT</option>
                    <option value="varchar">Varchar (Husk størrelse)</option>
                    <option value="datetime">Datetime (yyyymmdd)</option>
                </select>
            </td>
            <td align=center><input type=text name="length_<%=i%>" size=10></td>
            <td align=center>
                <select name=auto_<%=i%>>
                    <option value="nej" selected>Nej</option>
                    <option value="ja">Ja</option>
                </select>
            </td>
            <td align=center><input type=radio name="rdokey" value=<%=i%>></td>
        </tr>
<%    next %>
    <tr><td align=center><input type=submit value="Opret"></td></tr>
</table>
</form>
Avatar billede svjensen Nybegynder
18. november 2003 - 13:33 #3
Excellent.
En enkelt bemærkning: name i script skal være navn (for at passe til form).

Tak, husk svar
Avatar billede grunken Nybegynder
18. november 2003 - 13:40 #4
:)

jeg er så langsom at selv snegle griner af mig, men for en ordens skyld, kommer jeg lige med min version ;)

<script language="javascript" type="text/javascript">
function Valider(f) {
err = 0;
str = "følgende fejl er opstået";

for(i=0;f.rdokey.length>i;i++){
  if (!f.rdokey[i].checked && err==0){
  str += "Du skal vælge en primær nøgle!\n";
  err++;
  }
}
 
for (i=0;i<f.elements.length;i++){
  ident = f.elements[i].name.split("_");
  if(ident[0] == "type" && f.elements[i].value==""){   
    str += "Du skal udfylde en type i type_"+ident[1]+"\n";
    err++;
  }
  if(ident[0] == "navn" && f.elements[i].value==""){   
    str += "Du skal udfylde et navn i navn_"+ident[1]+"\n";
    err++;
  }
  }
  if(err>0){
  str += "total antal fejl"+err+"\n";
  alert (str)
  return false
}
}
</script>
Avatar billede roenving Novice
18. november 2003 - 13:40 #5
Hovsa, den havde jeg ikke kigget ordentligt efter !-)

-- ellers velbekomme '-)
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