21. oktober 2003 - 09:42Der er
11 kommentarer og 2 løsninger
Validering: selectmenu valg må ikke være ens
Hvordan validerer man bedst muligt nedenstående eksempel: Jeg har 5 ens select-menuer (samme indhold). Hvis man vælger 1 i en af dem må man ikke vælge 1 i en anden osv. (de må gerne være tomme alle sammen). Der skal altså komme en alert, når brugeren har lavet 2 ens valg
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title> ... </title> <meta name="Generator" content="Human intelligence"> </head>
<body> <script> function validering(frm) { var v = new Array(); v[1]=frm.test1[frm.test1.selectedIndex].value; v[2]=frm.test2[frm.test2.selectedIndex].value; v[3]=frm.test3[frm.test3.selectedIndex].value; v[4]=frm.test4[frm.test4.selectedIndex].value; v[5]=frm.test5[frm.test5.selectedIndex].value;
var a = new Array(); for (i=1;i<=5;i++) { if (v[i]!="" && a[v[i]]) { alert(v[i]+" valgt mere end een gang"); return false; } a[v[i]]=1; } return true;
Em anelse anderledes tilgang, men ellers skulle eriks vel virke perfekt !-)
<script type="text/javascript"> function validering(frm) { c = new Array(); for(var i=1;5>=i;i++){ c[i] = frm.elements['test'+i].value; } for(i=1;5>i;i++){ for(j=i+1;5>=j;j++){ if(c[i]==c[j]&&c[i]!=""){ alert('Der må ikke være valgt ens værdier!\n\nPrøv igen !-)') return false; } } } return true; } </script>
Jeg har fået det til at virke med Ericjacobsens løsning, men umiddelbart ser det også ud til at dit vil fungere.
Ericjacobsen vil du lige lægge et svar og tusind tak for hjælpen og til roenving tak for dit forslag (det er altid rart at se forskellige løsningsmuligheder på det samme problem) :)
Hvis der var mere end 5 valg ville roenvings være langsom (5*5 gennemløb af checket), mens min med arrays vil være hurtigere. Men med 5 er det ligemeget. Du kan evt stjæle roenvings første for-løkke, og give ham lidt krummer i belønning ;))
Ja, jeg var bevidst om, at den første kun tæller fra 1 til 4 og den anden fra i+1 til 5, da resten jo ville være overflødigt, men du har selvfølgelig ret i, at det ikke burde være nødvendigt at checke samtlige kombinationer, når man kan nøjes med at checke hver box op mod en samlet ting !-)
Hvorfor virker det ikke når jeg også laver det for en anden Selectmenu-gruppe? Kan det være noget med returneringen af true eller false.
var k = new Array(); k[1]=frm.kvalifikation1[frm.kvalifikation1.selectedIndex].value; k[2]=frm.kvalifikation2[frm.kvalifikation2.selectedIndex].value; k[3]=frm.kvalifikation3[frm.kvalifikation3.selectedIndex].value; k[4]=frm.kvalifikation4[frm.kvalifikation4.selectedIndex].value; k[5]=frm.kvalifikation5[frm.kvalifikation5.selectedIndex].value;
var b = new Array(); for (c=1;c<=5;c++) { if (k[c]!="" && b[k[c]]) { alert("Den samme kvalifikation kan ikke vælges mere end 1 gang."); return false; } b[k[c]]=1; } return true;
var u = new Array(); u[1]=frm.uddannelse1[frm.uddannelse1.selectedIndex].value; u[2]=frm.uddannelse2[frm.uddannelse2.selectedIndex].value; u[3]=frm.uddannelse3[frm.uddannelse3.selectedIndex].value; u[4]=frm.uddannelse4[frm.uddannelse4.selectedIndex].value; u[5]=frm.uddannelse5[frm.uddannelse5.selectedIndex].value; u[6]=frm.uddannelse6[frm.uddannelse6.selectedIndex].value; u[7]=frm.uddannelse7[frm.uddannelse7.selectedIndex].value; u[8]=frm.uddannelse8[frm.uddannelse8.selectedIndex].value; u[9]=frm.uddannelse9[frm.uddannelse9.selectedIndex].value; u[10]=frm.uddannelse10[frm.uddannelse10.selectedIndex].value;
var d = new Array(); for (e=1;e<=10;e++) { if (u[e]!="" && d[u[e]]) { alert("Den samme uddannelse kan ikke vælges mere end 1 gang."); return false; } d[u[e]]=1; } return true;
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.