Den forsøger jeg at validerer vha. dette java script:
<script type="text/javascript"> function folderCheck() { var navn = document.getElementById("navn").value; var adresse = document.getElementById("adres").value; var postnr = document.getElementById("postnr").value; var postnr_int = parseInt(postnr); var by = document.getElementById("by").value; var foldere = document.folder.folderID; var alert_tekst = '';
var submit_val = "true"; var folder_count = 0;
for (i = 0; i < foldere.length; i++) { if (foldere[i].checked) { var submit_val = "true"; break; } else { folder_count++; } }
if (folder_count == foldere.length) { alert_tekst += "- Du har ikke valgt en folder!\n"; submit_val = "false"; }
if (navn == '') { alert_tekst += "- Husk at angive et navn!\n"; submit_val = "false"; }
if (adresse == '') { alert_tekst += "- Husk at angive en adresse!\n"; submit_val = "false"; }
if (postnr == '') { alert_tekst += "- Husk at angive et postnummer!\n"; submit_val = "false"; } else { if (postnr_int < 1050 || postnr_int > 9990) { alert_tekst += "- Husk at angive et RIGTIGT postnummer!\n"; submit_val = "false"; } }
if (by == '') { alert_tekst += "- Husk at angive en by!\n"; submit_val = "false"; }
Mit problem består i, at den ikke validerer postnr-feltet korrekt. Som man kan se tester jeg dels for, om der overhovedet er indtastet noget, og om det indtastede er mellem de korrekte værdier. For at tjekke værdier i feltet bruger jeg parseInt(), som jo give 'NaN' hvis ikke det er et tal. Derfor troede jeg også jeg kunne teste på om 'var postnr_int' var lig 'NaN', men det virker tilsyneladende ikke, og derfor submitter formularen selvom man kun indtaster bogstaver...
Dernæst er der et problem med checkbox'ene. De bliver genereret af php, og derfor vil der være et variabelt antal checkboxe og så længe der er mere end en checkbox, virker koden fint nok, men ikke når der kun er en checkbox...
Findes der i øvrigt ikke en side a la php.net for JavaScript? Kunne godt tænke mig lidt hjælp til alle de funktioner osv der findes inden for java script:)
-- for det første må du ikke have flere elementer, der har det samme id, så du skal nok lave din php-rutine, så de får forskelligt id !-)
-- for det andet vil javascript ikke finde elementet, når navnet er 'folderID[]' (kan være at det netop ved et array af elementer kan findes, og derfor virker !-)
-- for det tredje vil en variabel kun have en length-property, hvis den er et array (eller en tekst-variabel, hvor .length er tekstens længde i karakterer/tegn !-)
Så måske:
...
var foldere = document.folder.elements["folderID[]"]; var alert_tekst = '';
var submit_val = "true"; var folder_count = fLength = 0;
if(foldere && foldere.length){ fLength = foldere.length; for (i = 0; i < fLength ; i++){ if (foldere[i].checked){ var submit_val = "true"; break; }else{ folder_count++; } } }else if(foldere && !foldere.checked) folder_count = fLength = 1; }else if(!foldere) fLength = 1; if (folder_count == fLength){ alert_tekst += "- Du har ikke valgt en folder!\n"; submit_val = "false"; }
Tror dog problemet består i, at jeg er nødt til at give checkboxene navner der slutter på [] for at php kan opfatte dem som et array og de tegn duer tilsyneladende ikke i javascript... men så må det kunne fixes på en anden måde måske?
Den kode der ligger oppe nu, fungerer perfekt ved to eller flere foldere, men ikke når der kun er en. Så kommer den med en fejlmeddelelse selvom man har valgt den der er at vælge:)
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.