15. februar 2005 - 13:14Der er
20 kommentarer og 1 løsning
Validering af indtastningerne i en formular
Jeg har et statistik-program som er lavet i FrontPage(2000) og Access(2002). Jeg har kun en formular plus nogle html-sider, hvor forskellige udtræk af data vha. Databas Resultater Wizard og nogle SQL-sætninger vises. Mit opgave og problem er at finde en kode som kan forebygge fejl-indtastninger.
Jeg kender ikke noget til ASP og kun lidt til JavaScript og SQL.
I formularen har jeg 10 felter: Felt 1: Dato (dags-dato indsættes automatisk i Tekst-feltet) Felt 2: 2 radio-knapper Felt 3: Rulleliste ..... Felterne 3 - 10 er alle rullelister.
Ved udfyldning af formularen:
- Hvis man vælger det første radio-knap: Så skal man vælge de felter INDTIL (inklusive) felt-nr.5 OG skal man IKKE kunne vælge flere felter.
- Hvis man vælger det andet radio-knap: Skal man i hvert fald vælge et punkt i relleliste nr.6 (Default værdi for alle rullelister er: Vælg - Dvs. når man ikke vælger noget, så vælger man "Vælg" med tal værdien: 99 i databasen)
- Hvis der vælges det første menupunkt i rulleliste nr.6 (består af "Vælg" og 3 valgmuligheder) - det første valgmulighed under Vælg - skal man ikke kunne vælge flere felter og skal kun kunne trykke på submit-knap.
- Hvis der vælges det andet eller det tredje menupunkt i rulleliste nr.6, skal man også vælge en af valgmulihederne i rulleliste-nr.7.
Hvis der vælges det første valgmulighed i rulleliste-nr.7, skal man kun vælge en af de valgmulighederne i felt-nr.8. Hvis der vælges det andet valgmulighed i rulleliste-nr.7, skal man kun vælge en af de valgmulighederne i felt-nr.9 og Hvis der vælges det tredje valgmulighed i rulleliste-nr.7, skal man kun vælge en af de valgmulighederne i felt-nr.10. Ved valg af 4. valgmulighed i rulleliste-nr.7, skal man ikke kunne vælge flere felter og skulle der kun være muligt at trykke på submit-knappen.
Jeg håber meget at have kunnet at forklare mit problem tydeligt nok. Det var lidt svært for mig. Jeg går ud fra at et eller andet JavaScript kan evtl. være en løsning. Derfor sender jeg dette spørgsmål til Jer og håber meget på svar.
Lyder næsten som om du skal over under opgaver, for selvom det ikke er vildt kompliceret, er det en slaveopgave, hvis du ikke selv kan færdiggøre det efter at have fået principperne og nogle eksempler !-)
Måske har du ret. Ellers virker hjemmeside fint. Jeg har også lavet følgende JavaScript kode for validering af de første 5 felter, men jeg kan ikke finde ud af hvordan man laver validering som har nogle betingelser. Dvs. hvis man vælger i rulleliste nr.6 noget så skal man også vælge en af de valgmulighederne i rulleliste nr.7 ellers få man et promt-vindue hvor der står et eller andet. Koden for validering af første 5 felter er:
<script language="JavaScript"> <!-- function formCheck(formobj){ // Enter name of mandatory fields var fieldRequired = Array("Reg_tid", "Type_ID", "Henvender_ID", "Henvendelsesform_ID", "Institution_ID"); // Enter field description to appear in the dialog box var fieldDescription = Array("Registreringsdato", "Registreringen gælder", "Henvender", "Henvendelsesform", "Institution"); // dialog message var alertMsg = "Udfyld venligst følgende felter:\n"; var l_Msg = alertMsg.length; for (var i = 0; i < fieldRequired.length; i++){ var obj = formobj.elements[fieldRequired[i]]; if (obj){ switch(obj.type){ case "select-one": if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == "Vælg" || obj.options[obj.selectedIndex].text == ""){alertMsg += " - " + fieldDescription[i] + "\n"; } break; default: } if (obj.type == undefined){ var blnchecked = false; for (var j = 0; j < obj.length; j++){ if (obj[j].checked){ blnchecked = true; } } if (!blnchecked){ alertMsg += " - " + fieldDescription[i] + "\n"; } } }} if (alertMsg.length == l_Msg){return true; }else{alert(alertMsg); return false; } } // --> </script> ------------ Og i <form> har jeg indsat: <form ... onsubmit="return formCheck(this);">
Mange tak for svaret. Det virker næsten.. Men der er 3 ting: 1- Jeg har ændret lidt på radio-knap nr. 2 fordi jeg ville at ved valg af radioknap-2 vises der også "block 1". 2- Der vises ikke flere felter når jeg trykker på radioknap-2 og vælger underste rulleliste punkter i valgSelect-rullelisten (nr. 6). Som skrevet har jeg meget lidt viden om JavaScript, Men jeg går ud fra at ved rullelister den overste har den index=0 osv. Derfor kan jeg ikke forstår hvorfor i den lille JavaScript kode som jeg har sat i <HEAD> - sektionen skulle der begyndes med ...for(i=8;i<=10;i++).. og hvorfor ikke i=6. 3- Koden forudsætter at felterne fra 7-10 begynder med navnet "sel". Men jeg har noget andet navn i databasen. Betyder det at jeg skal lave om på databasen og derfor også lave om på formatteringer som jeg har lavet på asp-sider som viser database-resultater? Eller kan man alligevel beholde de oprindelige felt-navne.
Jeg ved at jeg forventer for meget men.... gider du at kigge på nedstående kode også der er lavet i FrontPage efter din kode og hjælper mig videre :-?
<script language="JavaScript"> var mydate=new Date() var theyear=mydate.getYear() if (theyear < 1000) theyear+=1900 var theday=mydate.getDay() var themonth=mydate.getMonth()+1 if (themonth<10) themonth="0"+themonth var theday=mydate.getDate() if (theday<10) theday="0"+theday
/////EDIT below three variable to customize the format of the date/////
var displayfirst=theyear var displaysecond=themonth var displaythird=theday ///// document.statistic.Reg_tid.value=displayfirst+"-"+displaysecond+"-"+displaythird </script> </body></html>
-- det nemmeste vil være at lave en oversættelse i dit server-side sprog, for ellers skal vi tilføje noget med et array, som der slås op i i javascriptet !-)
Det virker nu. Bortset fra omdøbbelse af feltnavne. Jeg er blank når du fortæller om "...lave en oversættelse i dit server-side sprog" eller "...tilføje noget med et array, som der slås op i i javascriptet". Bliver meget glad at høre fra dig igen.
Iøvrigt jeg har også tilføjet 2 options i felt 7. Jeg har glemt at sige, at felt 7 skulle faktisk have en firer option, og ved valg af det, skulle man kun kunne klikke på submit og felt 8, 9 og 10 blive usynlige. Jeg har tilføjet det og det virker bare på den måde som det skulle være! fint. :-)
Uden at have forstået helt hvad der menes med storrelse, brede og tykkelse kan jeg sige, at: Felt 6 navn (i databasen+formular) består af 13 bogstaver OG har 3 punkter(ekskl. Vælg) Felt 7 navn (i databasen+formular) består af 12 bogstaver OG har 4 punkter(ekskl. Vælg) Felt 8 navn (i databasen+formular) består af 13 bogstaver OG har 8 punkter(ekskl. Vælg) Felt 9 navn (i databasen+formular) består af 13 bogstaver OG har 5 punkter(ekskl. Vælg) Felt 10 navn (i databasen+formular) består af 13 bogstaver OG har 5 punkter(ekskl. Vælg)
Iøvrigt jeg får fejlmeddelelse ved valg af firer punkt i felt7 ...<option value="4">Firer7</option>... fejl: 'form.elements[....].style' er null eller ikke et objekt.
Hej igen, Jeg skal sige tak for hjælpen. Desværre har min viden om JavaScript ikke har været god nok til at bringe det her til at virke, men jeg har jo lært alligevel noget. Send venligst et svar, så jeg kan "Acceptere". Ellers min sidste anstrængelser ser såden ud og jeg får stadigvæk det samme fejlmeddelelse:
<script type="text/javascript"> var blok3sels = ['sel8','sel9','sel10','sel11']; function show(sel){ for(i=0;i<=blok3sels.length;i++) sel.form.elements[blok3sels[i]].style.display='none'; sel.form.elements[blok3sels[sel.selectedIndex]].style.display='inline'; } </script>
</head>
<body>
<script language="JavaScript"> <!-- function formCheck(formobj){ // Enter name of mandatory fields var fieldRequired = Array("Hen_ID", "Henform_ID", "Inst_ID"); // Enter field description to appear in the dialog box var fieldDescription = Array("Henvender", "Henvendelsesform", "Institution"); // dialog message var alertMsg = "Udfyld venligst følgende felter:\n"; var l_Msg = alertMsg.length; for (var i = 0; i < fieldRequired.length; i++){ var obj = formobj.elements[fieldRequired[i]]; if (obj){ switch(obj.type){ case "select-one": if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == "Vælg"){ alertMsg += " - " + fieldDescription[i] + "\n"; } break;
default: } if (obj.type == undefined){ var blnchecked = false; for (var j = 0; j < obj.length; j++){ if (obj[j].checked){ blnchecked = true; } } if (!blnchecked){ alertMsg += " - " + fieldDescription[i] + "\n"; } } } }
<script language="JavaScript"> var mydate=new Date() var theyear=mydate.getYear() if (theyear < 1000) theyear+=1900 var theday=mydate.getDay() var themonth=mydate.getMonth()+1 if (themonth<10) themonth="0"+themonth var theday=mydate.getDate() if (theday<10) theday="0"+theday
/////EDIT below three variable to customize the format of the date/////
var displayfirst=theyear var displaysecond=themonth var displaythird=theday ///// document.statistic.Reg_tid.value=displayfirst+"-"+displaysecond+"-"+displaythird </script>
Hvis man bare kunne fjerne dette grimme fejl-ikon fra processlinie ved valg af den firer punkt i option-4 af <select name="sel7"....>. Grunden er at jeg kan ikke have et selstændig felt (det 11. felt) fordi der findes heller ikke noget selvstændig tabel for dette felt såsom der findes for andre felter. Hvordan kan man så bevare muligheden at vælge option-4 i felt 7 men ikke få noget fejl-ikon?
<script type="text/javascript"> var blok3sels = ['sel8','sel9','sel10']; function show(sel){ for(i=0;i<blok3sels.length;i++) sel.form.elements[blok3sels[i]].style.display='none'; sel.form.elements[blok3sels[sel.selectedIndex-1]].style.display='inline'; } </script> </head> <body>
<script language="JavaScript"> <!-- function formCheck(formobj){ // Enter name of mandatory fields var fieldRequired = Array("Hen_ID", "Henform_ID", "Inst_ID"); // Enter field description to appear in the dialog box var fieldDescription = Array("Henvender", "Henvendelsesform", "Institution"); // dialog message var alertMsg = "Udfyld venligst følgende felter:\n";
var l_Msg = alertMsg.length;
for (var i = 0; i < fieldRequired.length; i++){ var obj = formobj.elements[fieldRequired[i]]; if (obj){ switch(obj.type){ case "select-one": if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == "Vælg"){ alertMsg += " - " + fieldDescription[i] + "\n"; } break;
default: } if (obj.type == undefined){ var blnchecked = false; for (var j = 0; j < obj.length; j++){ if (obj[j].checked){ blnchecked = true; } } if (!blnchecked){ alertMsg += " - " + fieldDescription[i] + "\n"; } } } }
</div><!-- slut blok3 --> </div><!-- slut blok2 --> <p><input type="submit" value="Send" name="B1"></p> </form>
<script language="JavaScript"> var mydate=new Date() var theyear=mydate.getYear() if (theyear < 1000) theyear+=1900 var theday=mydate.getDay() var themonth=mydate.getMonth()+1 if (themonth<10) themonth="0"+themonth var theday=mydate.getDate() if (theday<10) theday="0"+theday
/////EDIT below three variable to customize the format of the date/////
var displayfirst=theyear var displaysecond=themonth var displaythird=theday ///// document.statistic.Reg_tid.value=displayfirst+"-"+displaysecond+"-"+displaythird </script> </body> </html>
Hej igen, Det ser ud som om følgende koder virker:
<script type="text/javascript"> var blok3sels = ['Felt8','Felt9','Felt10','Felt11']; function show(sel){ if (!(blok3sels > 2)){ for(i=0;i<blok3sels.length;i++) sel.form.elements[blok3sels[i]].style.display='none'; sel.form.elements[blok3sels[sel.selectedIndex-1]].style.display='inline'; } sel.form.elements[blok3sels[3]].style.display='none'; } </script>
-- Felt 11 er bare fiktive og jeg har indsat det sådan: ... <p><select name="Felt11" style="display:none;" size="1"> </select></p> ... _________________
Hvad mener du så om denne kode/ændring af din kode?
I felt 7 i formularen har jeg 4 otions plus "Vælg". Disse 4 options sender data til en hovedtabel hvor der findes et felt for forskellige valgte værdier for felt 7. De første 3 options har også deres egen tabel(hvilke betyder, at der skulle være muligt at vælge forskellige værdier/options i deres felt - felt 8, 9 og 10), hvor deres primære nøgle relateres til den tilsvarende i hovedtabellen. Men option 4 i felt 7 har ikke sin egen tabel og heller ikke nogen options. Derfor skal option 4 være muligt at vælge (i felt 7) uden at have nogen rulleliste i formularen. Jeg håber at forklaringen giver mening. Ellers tak en gang til. Jeg venter på et "Svar":-))
Det har du jo allerede længst fortjent allerede med din første relevante svar(:-))
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.