31. juli 2001 - 15:33
Der er
44 kommentarer og 3 løsninger
Validering af form
Hej først spm fra mig i javascriptkategorien :) (jeg er nybegynder) Jeg er PHP-mand så det kan godt ske at min js-kode bærer præg af det :) Jeg har en function der onSubmit skal validere min form. Det der skal ske, er at hvis en af felterne ikke er udfyldt, så skal der afbrydes for \"submittelsen\" (noget break agtigt noget). Samtidig er feltet \"payment\" af typen \"radio\" som ikke vil reagere på if(formPayment == \'\') {, hvad kan jeg gøre det ved? så der er 2 spm, \"radio\"-problemet og \"bread\"-problemet! Her er min kode: <script language=\"javascript\" > function tjekinput() { formPayment = document.orderarticles.payment.value; formFirma = document.orderarticles.firma.value; formFornavn = document.orderarticles.fornavn.value; formEfternavn = document.orderarticles.efternavn.value; formAdresse = document.orderarticles.adresse.value; formPostnr = document.orderarticles.postnr.value; formTlf = document.orderarticles.tlf.value; formBy = document.orderarticles.by.value; formEmail = document.orderarticles.email.value; formKommentar = document.orderarticles.kommentar.value; if(formPayment == \'\') { alert(\'Betalingsmetode\'); } else { if(formFornavn == \'\') { alert(\'Fornavn\'); } else { if(formEfternavn == \'\') { alert(\'Efternavn\'); } else { if(formAdresse == \'\') { alert(\'Adresse\'); } else { if(formPostnr == \'\') { alert(\'Postnummer\'); } else { if(formBy == \'\') { alert(\'By\'); } else { if(formTlf == \'\') { alert(\'Telefon\'); } } } } } } } } </script>
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
du skal have den til at returnere false såfremt du ikke ønsker at der skal submittes. dvs. onsubmit=\"java script:return tjekinput()\" i hver af dine if-sætninger skal du returnere false og til sidst i tjekinput skal du returnere true.
... og så vil du gøre dig selv en tjeneste ved ikke at neste dine if\'s, så det bliver: if(formPayment == \'\') { alert(\'Betalingsmetode\'); return false; } if(formFornavn == \'\') { alert(\'Fornavn\'); return false; } if(formEfternavn == \'\') { alert(\'Efternavn\'); return false; } if(formAdresse == \'\') { alert(\'Adresse\'); return false; } if(formPostnr == \'\') { alert(\'Postnummer\'); return false; } if(formBy == \'\') { alert(\'By\'); return false; } if(formTlf == \'\') { alert(\'Telefon\'); return false; } Det med value af Payment-feltet: har dine options en defineret value-property ?? Ellers kan du bruge .selectedIndex, som du kan teste for, om den er 0 eller større hth jes
nu ser min kode sådan ud: <script language=\"javascript\" > function tjekinput() { formPayment = document.orderarticles.payment.value; formFirma = document.orderarticles.firma.value; formFornavn = document.orderarticles.fornavn.value; formEfternavn = document.orderarticles.efternavn.value; formAdresse = document.orderarticles.adresse.value; formPostnr = document.orderarticles.postnr.value; formTlf = document.orderarticles.tlf.value; formBy = document.orderarticles.by.value; formEmail = document.orderarticles.email.value; formKommentar = document.orderarticles.kommentar.value; if(formPayment == \'\') { alert(\'Betalingsmetode\'); return FALSE; } else { if(formFornavn == \'\') { alert(\'Fornavn\'); return FALSE; } else { if(formEfternavn == \'\') { alert(\'Efternavn\'); return FALSE; } else { if(formAdresse == \'\') { alert(\'Adresse\'); return FALSE; } else { if(formPostnr == \'\') { alert(\'Postnummer\'); return FALSE; } else { if(formBy == \'\') { alert(\'By\'); return FALSE; } else { if(formTlf == \'\') { alert(\'Telefon\'); return FALSE; } else { return TRUE; } } } } } } } } </script> og i formen sådan: <form method=\"post\" action=\"index.php?a2=order\" name=\"orderarticles\" onSubmit=\"return tjekinput()\" > Jeg bliver nødt til at skal have noget mere hjælp :)
roenving -> får jeg så ikke en alert for hver fejl der er? altså hvis jeg nu mangler at udfylde 3 felter, så vil jeg kun have een alert og ikke 3...
min payment har en value, der er 4 radiofelter hvor values er enten dankort,post,konto eller check
et lille trick: lav en lille extra funktion foran din tjekinput() funktion: function nogo( felt ) { alert( \"Der skal stå noget i feltet \" +felt.name ); felt.focus(); // såt focus så feltet er klar til at skrive i return false }; //end nogo( formelement objekt ) -> false function tjekinput() { var frm = document.orderarticles; // kortere end at skrive det hver gang if ( (formPayment = frm.payment.value) == \"\") return nogo( frm.payment ); if ( (formFirma = frm.firma.value) == \"\") return nogo( frm.firma ); if ( (formFornavn = frm.fornavn.value == \"\") return nogo( frm.fornavn ); if ( (formEfternavn = frm.efternavn.value == \"\") return nogo( frm.efternavn ); // og så videre // ... // til allersidst: return true; // hvis alle tests gik godt }
>>> htx98i17 Nej, du får kun een alert, for return betyder at funktionen returnerer til kaldet med false-værdien. ;-]
Radioknapper testes anderledes: if ( (formPayment = frm.payment.value) == \"\") return nogo( frm.payment ); skiftes ud med de 3 linier: var i; for (i=0; i<frm.payment.length; i++) if ( frm.payment.checked ) break; if ( i>=frm.payment.length ) return nogo( frm.payment );
jacoka, jeg er lidt i tvivl om hvordan det der return nogo(frm.noget) virker.. Følgende virker nu, men jeg vil gerne om jeg kan komme til at forstå det jakoba mener <script language=\"javascript\" > function tjekinput() { var frm = document.orderarticles; formPayment = frm.payment.value; formFirma = frm.firma.value; formFornavn = frm.fornavn.value; formEfternavn = frm.efternavn.value; formAdresse = frm.adresse.value; formPostnr = frm.postnr.value; formTlf = frm.tlf.value; formBy = frm.by.value; formEmail = frm.value; formKommentar = frm.value; if(formPayment == \'\') { alert(\'Betalingsmetode\'); return false; } if(formFornavn == \'\') { alert(\'Fornavn\'); return false; } if(formEfternavn == \'\') { alert(\'Efternavn\'); return false; } if(formAdresse == \'\') { alert(\'Adresse\'); return false; } if(formPostnr == \'\') { alert(\'Postnummer\'); return false; } if(formBy == \'\') { alert(\'By\'); return false; } if(formTlf == \'\') { alert(\'Telefon\'); return false; } } </script>
31. juli 2001 - 16:11
#10
det jakoba siger er bare, at du kan håndtere alle fejlmeddelelserne samme sted. på den måde kan du slippe for en del indtastninger og få koden til at se lidt pænere ud.
31. juli 2001 - 16:12
#11
nogo funktionen samler blot de ting der skal gøres ved enhver fejl så man slipper for at skrive det igen og igen. og slutter så af med at returnere false. ellers virker det præcis ligesom roenving\'s. husk på det felt der hedder payment og er radioknapper. det skal testes anderledes (Kommentar fra jakoba 31/07 2001 16:04:15) mvh JakobA
31. juli 2001 - 16:16
#12
så det i mener er at jeg skal lave alle if-sætninger om til: if(formNoget == \'\') { nogo(); } ?
31. juli 2001 - 16:19
#13
if(formNoget == \'\') return nogo( frm.Noget ); hvor Noget er navnet på det felt
31. juli 2001 - 16:28
#14
Jeg er på herrens mark, Er dette helt forkert? <script language=\"javascript\" > function nogo(form.name) { alert( \"Udfyld venligst feltet\" + form.name ); form.focus(); return false } function tjekinput() { var frm = document.orderarticles; formPayment = frm.payment.value; formFirma = frm.firma.value; formFornavn = frm.fornavn.value; formEfternavn = frm.efternavn.value; formAdresse = frm.adresse.value; formPostnr = frm.postnr.value; formTlf = frm.tlf.value; formBy = frm.by.value; formEmail = frm.value; formKommentar = frm.value; if(formFirma == \'\') return nogo(form.Firma); if(formFornavn == \'\') return nogo(form.Fornavn); if(formEfternavn == \'\') return nogo(form.Efternavn); if(formAdresse == \'\') return nogo(form.Adresse); if(formPostnr == \'\') return nogo(form.Postnr); if(formTlf == \'\') return nogo(form.Tlf); if(formBy == \'\') return nogo(form.By); } </script>
31. juli 2001 - 16:30
#15
hov, jeg skal jo kalde det frm og ikke form nu er det sådan <script language=\"javascript\" > function nogo(frm.name) { alert( \"Udfyld venligst feltet\" + frm.name ); frm.focus(); return false } function tjekinput() { var frm = document.orderarticles; formPayment = frm.payment.value; formFirma = frm.firma.value; formFornavn = frm.fornavn.value; formEfternavn = frm.efternavn.value; formAdresse = frm.adresse.value; formPostnr = frm.postnr.value; formTlf = frm.tlf.value; formBy = frm.by.value; formEmail = frm.value; formKommentar = frm.value; if(formFirma == \'\') return nogo(frm.Firma); if(formFornavn == \'\') return nogo(frm.Fornavn); if(formEfternavn == \'\') return nogo(frm.Efternavn); if(formAdresse == \'\') return nogo(frm.Adresse); if(formPostnr == \'\') return nogo(frm.Postnr); if(formTlf == \'\') return nogo(frm.Tlf); if(formBy == \'\') return nogo(frm.By); } </script>
31. juli 2001 - 16:31
#16
Hvis du så vil have en speciel måde at henvise til felterne, f.eks. med den label du har ved feltet, kan du udvide jakoba\'s funktion til: function nogo( felt, label ) { alert( \"Der skal stå noget i feltet \" +label ); felt.focus(); // såt focus så feltet er klar til at skrive i return false }; //end nogo( formelement objekt ) -> false og så kalde dem med f.eks.: if(formPostnr == \'\') return nogo( frm.postnr, \'Postnummer\' ); hth jes
31. juli 2001 - 16:35
#17
den ser sådan ud nu og den kommer ikke med nogen alert :( <script language=\"javascript\" > function nogo(frm.name) { alert( \"Udfyld venligst feltet\" + frm.name ); frm.name.focus(); return false } function tjekinput() { var frm = document.orderarticles; formPayment = frm.payment.value; formFirma = frm.firma.value; formFornavn = frm.fornavn.value; formEfternavn = frm.efternavn.value; formAdresse = frm.adresse.value; formPostnr = frm.postnr.value; formTlf = frm.tlf.value; formBy = frm.by.value; formEmail = frm.value; formKommentar = frm.value; if(formFirma == \'\') return nogo(frm.firma); if(formFornavn == \'\') return nogo(frm.fornavn); if(formEfternavn == \'\') return nogo(frm.efternavn); if(formAdresse == \'\') return nogo(frm.adresse); if(formPostnr == \'\') return nogo(frm.postnr); if(formTlf == \'\') return nogo(frm.tlf); if(formBy == \'\') return nogo(frm.by); } </script>
31. juli 2001 - 16:35
#18
Det er ihvertfald godt på vej. men navnet på firmafeltet er firma med lille f så det skal det også der hvor du kalder nogo. og der skal stå frm foran istedet for form (væk med o\'et). if(formFirma == \'\') return nogo(frm.firma); ligesådan med de andre felter. ved email og kommentaar har du glemt feltnavnet. det skal være formEmail = frm.email.value; formKommentar = frm.kommentar.value; og de to skal vel også have en if.
31. juli 2001 - 16:38
#19
jeps jakoba, jeg har rettet det med store og små bogstaver som i mit sisdste eksempel, mht email og kommentar, så er det ikke påkrævet at blive udfyldt, det er bare mig der ik har fået de to slettet fra koden, sorry... mit sidste eksempel virker ik lige,?
31. juli 2001 - 16:40
#20
det test vi bruger her er til tekstfelter. du snakkede om at feltet payment i virkeligheden var radioknapper. Det felt skal testes anderledes.
31. juli 2001 - 16:42
#21
ok jakoba, jeg ville vente ldit med den anderledes test for payment, til jeg havde fået de andre felter til at virke, men vi kan godt prøve det nu...
31. juli 2001 - 16:44
#22
næe, det var da en fornuftig ide. hvis du fjerner linierne med email og kommentar felt skulle det også virke nu.
31. juli 2001 - 16:45
#23
hehe jakoba, jeg håber du har lidt tålmodighed endnu for dette virker ikke :)) <script language=\"javascript\" > function nogo(frm.name) { alert( \"Udfyld venligst feltet\" + frm.name ); frm.name.focus(); return false } function tjekinput() { var frm = document.orderarticles; formPayment = frm.payment.value; formFirma = frm.firma.value; formFornavn = frm.fornavn.value; formEfternavn = frm.efternavn.value; formAdresse = frm.adresse.value; formPostnr = frm.postnr.value; formTlf = frm.tlf.value; formBy = frm.by.value; var i; for(i=0; i<frm.payment.length; i++) if ( frm.payment.checked ) break; if(i>=frm.payment.length ) return nogo( frm.payment ); if(formFirma == \'\') return nogo(frm.firma); if(formFornavn == \'\') return nogo(frm.fornavn); if(formEfternavn == \'\') return nogo(frm.efternavn); if(formAdresse == \'\') return nogo(frm.adresse); if(formPostnr == \'\') return nogo(frm.postnr); if(formTlf == \'\') return nogo(frm.tlf); if(formBy == \'\') return nogo(frm.by); } </script>
31. juli 2001 - 16:47
#24
Næe for søren, den er gået galt med nogo funktionen: den skal være: function nogo( felt ) { alert( \"Udfyld venligst feltet\" + felt.name ); felt.focus(); return false } lidt endnu, (vi laver roenving\'s udvidelse bagefter :)
31. juli 2001 - 16:51
#25
jakoba -> nu alerter den med \"Udfyld venligst feltetUndefinded\"
31. juli 2001 - 16:51
#26
og koden ser sådan ud: <script language=\"javascript\" > function nogo(felt) { alert( \"Udfyld venligst feltet\" + felt.name ); felt.name.focus(); return false } function tjekinput() { var frm = document.orderarticles; formPayment = frm.payment.value; formFirma = frm.firma.value; formFornavn = frm.fornavn.value; formEfternavn = frm.efternavn.value; formAdresse = frm.adresse.value; formPostnr = frm.postnr.value; formTlf = frm.tlf.value; formBy = frm.by.value; var i; for(i=0; i<frm.payment.length; i++) if ( frm.payment.checked ) break; if(i>=frm.payment.length ) return nogo( frm.payment ); if(formFirma == \'\') return nogo(frm.firma); if(formFornavn == \'\') return nogo(frm.fornavn); if(formEfternavn == \'\') return nogo(frm.efternavn); if(formAdresse == \'\') return nogo(frm.adresse); if(formPostnr == \'\') return nogo(frm.postnr); if(formTlf == \'\') return nogo(frm.tlf); if(formBy == \'\') return nogo(frm.by); } </script>
31. juli 2001 - 16:52
#27
+ at den ikke breaker submittelsen
31. juli 2001 - 16:52
#28
og jeg havde lavet en fejl i linien: for (i=0; i<frm.payment.length; i++) if ( frm.payment.checked ) break; der skal stå: for (i=0; i<frm.payment.length; i++) if ( frm.payment[i].checked ) break;
31. juli 2001 - 16:53
#29
jeg forstår heller ikke hvor den får \"felt\" fra?
31. juli 2001 - 16:54
#30
ok, for-løkken er rettet: den alerter stadig med \"Udfyld venligst feltetUndefinded\" og den breaker ikke submittelsen <script language=\"javascript\" > function nogo(felt) { alert( \"Udfyld venligst feltet\" + felt.name ); felt.focus(); return false } function tjekinput() { var frm = document.orderarticles; formPayment = frm.payment.value; formFirma = frm.firma.value; formFornavn = frm.fornavn.value; formEfternavn = frm.efternavn.value; formAdresse = frm.adresse.value; formPostnr = frm.postnr.value; formTlf = frm.tlf.value; formBy = frm.by.value; var i; for (i=0; i<frm.payment.length; i++) if ( frm.payment[i].checked ) break; if(i>=frm.payment.length ) return nogo( frm.payment ); if(formFirma == \'\') return nogo(frm.firma); if(formFornavn == \'\') return nogo(frm.fornavn); if(formEfternavn == \'\') return nogo(frm.efternavn); if(formAdresse == \'\') return nogo(frm.adresse); if(formPostnr == \'\') return nogo(frm.postnr); if(formTlf == \'\') return nogo(frm.tlf); if(formBy == \'\') return nogo(frm.by); } </script>
31. juli 2001 - 16:56
#31
hvordan ser alle radioknapperne ud (det stykke af din htmlkode der er payment feltet).
31. juli 2001 - 16:57
#32
det er kombineret med PHP, og det ser måske lidt rodet ud: <tr class=\"mainsmall\" > <td><input type=\"radio\" name=\"payment\" value=\"dankort\" <?php if($payment == \"dankort\" || $payment == \"dankort\" ) { print\"checked\"; } ?> onclick=\"location.href=\'?a2=paydesk&payment=dankort\'\" ></td> <td class=\"mainsmall\" colspan=\"2\" >Dankort. (<?php echo$dankort[data]; ?> kr.)</td> </tr> <tr class=\"mainsmall\" > <td><input type=\"radio\" name=\"payment\" value=\"post\" <?php if($payment == \"opkraevning\" || $payment == \"post\" ) { print\"checked\"; } ?> onclick=\"location.href=\'?a2=paydesk&payment=opkraevning\'\" ></td> <td class=\"mainsmall\" colspan=\"2\" >Postopkrævning. (<?php echo$postop[data]; ?> kr. + 8 kr. som betales til postbudet.)</td> </tr> <tr class=\"mainsmall\" > <td><input type=\"radio\" name=\"payment\" value=\"konto\" <?php if($payment == \"overfoersel\" || $payment == \"konto\" ) { print\"checked\"; } ?> onclick=\"location.href=\'?a2=paydesk&payment=overfoersel\'\" ></td> <td class=\"mainsmall\">Forudbetaling via kontooverførsel. (<?php echo$forudb[data]; ?> kr.)</td> <td> </td> </tr> <tr class=\"mainsmall\" > <td><input type=\"radio\" name=\"payment\" value=\"check\" <?php if($payment == \"check\" || $payment == \"check\") { print\"checked\"; } ?> onclick=\"location.href=\'?a2=paydesk&payment=check\'\" ></td> <td class=\"mainsmall\">Forudbetaling via check. (<?php echo$checkfragt[data]; ?> kr.)</td> <td> <input type=\"hidden\" name=\"fragtpris1\" value=\"<?php echo$fragtpris[data]; ?>\" ><input type=\"hidden\" name=\"finalamount\" value=\"<?php echo$finalamount; ?>\" ></td> </tr>
31. juli 2001 - 16:59
#33
står der onsubmit=\"return tjekinput()\" i din form kommado. Hvis der ikke står return foran virker det ikke.
31. juli 2001 - 17:00
#34
det gør der, den hedder: <form method=\"post\" action=\"index.php?a2=order\" name=\"orderarticles\" onSubmit=\"return tjekinput()\" >
31. juli 2001 - 17:03
#35
Det gør ikke noget med lidt rod, især ikke når der er gode indrykninger så man kan finde ud af hvor man er :-). jeg tror det er mig der har lavet en anden fejl. linien: if(i>=frm.payment.length ) return nogo( frm.payment ); bør være: if(i>=frm.payment.length ) return nogo( frm.payment[0] ); for at Undefined kan blive til det rigtige navn.
31. juli 2001 - 17:03
#36
en detalje: hvis jeg vælger en payment, og submitter, så alerter den med \"Udfyld venligst feltetfirma\"
31. juli 2001 - 17:06
#37
så virker det jakoba! fedt! Skal vi så lave det med label? :o))
31. juli 2001 - 17:07
#38
og må jeg lige spørge om hvor function nogo() får variablen \"felt\" fra?
31. juli 2001 - 17:10
#39
følgende kode virker: <script language=\"javascript\" > function nogo(felt) { alert( \"Udfyld venligst feltet\" + felt.name ); felt.focus(); return false } function tjekinput() { var frm = document.orderarticles; formPayment = frm.payment.value; formFirma = frm.firma.value; formFornavn = frm.fornavn.value; formEfternavn = frm.efternavn.value; formAdresse = frm.adresse.value; formPostnr = frm.postnr.value; formTlf = frm.tlf.value; formBy = frm.by.value; var i; for (i=0; i<frm.payment.length; i++) if ( frm.payment[i].checked ) break; if(i>=frm.payment.length ) return nogo( frm.payment[0] ); if(formFirma == \'\') return nogo(frm.firma); if(formFornavn == \'\') return nogo(frm.fornavn); if(formEfternavn == \'\') return nogo(frm.efternavn); if(formAdresse == \'\') return nogo(frm.adresse); if(formPostnr == \'\') return nogo(frm.postnr); if(formBy == \'\') return nogo(frm.by); if(formTlf == \'\') return nogo(frm.tlf); } </script>
31. juli 2001 - 17:17
#40
funktionen nogo får sin variabel felt idet vi kalder den if(formFirma == \'\') return nogo(frm.firma); det der står indeni parentesen efter nogo bliver lagti ind i felt præsis som hvis vi havde saget: felt = frm.firma; på den måde får felt en forskellig værdi hvergang vi kalder nogo( ... ). men nu skal vi have udvidet så der kommer 2 parametre. så hvert sted vi kalder skal der så også angives 2 værdier, een til felt og een til label funktionen bliver: function nogo( felt, label ) { alert( \"Der skal stå noget i feltet \" +label ); felt.focus(); // såt focus så feltet er klar til at skrive i return false }; //end nogo( formelement objekt ) -> false og der vi kalder den tilføjer vi et \'kønt navn\' der kan blivet til variable label: if(i>=frm.payment.length ) return nogo( frm.payment[0], \"betalingsform\" ); if(formFirma == \'\') return nogo( frm.firma, \"Firma\" ); osv. mvh JakobA
31. juli 2001 - 17:24
#41
yes, så virker det perfekt jo :) jakoba lig lige et svar, så får i lige lidt point... Tusind tak for hjælpen og tålmodigheden :)
31. juli 2001 - 17:29
#42
takker
31. juli 2001 - 17:32
#43
selv tak da :)
31. juli 2001 - 17:33
#44
Hov forresten fik du skrevet return true; // alt er udfyldt, så nu må den submittes tilsidst i funktionen tjekinput()
31. juli 2001 - 17:36
#45
nej det fik jeg ikke gjort, men den submitter alliegevel? jeg undrede mig godt nok også hvor den fik true fra, men den virker alliegevel?
31. juli 2001 - 17:41
#46
jeg skal lige æde, er tilbage lidt senere :)
31. juli 2001 - 18:01
#47
>> Så fik du sgu da noget for den 25-øre *GG* Takker ;~}
Vi tilbyder markedets bedste kurser inden for webudvikling