Avatar billede elskermad.dk Nybegynder
30. maj 2004 - 20:05 Der er 11 kommentarer og
1 løsning

sikre at selectbokse ikke kan indeholde det samme!

hej eksperter :)

jeg skal have lavet et system der sikre mig at x antal select-bokse ikke kan have samme værdi...

et eksempel:

selectbox1 har valgmulighederne 1,2,3,4,5,6 og værdien er 1 valgt
selectbox2 har valgmulighederne 1,2,3,4,5,6 og værdien er 2 valgt
selectbox3 har valgmulighederne 1,2,3,4,5,6 og værdien er 3 valgt
selectbox4 har valgmulighederne 1,2,3,4,5,6 og værdien er 4 valgt
selectbox5 har valgmulighederne 1,2,3,4,5,6 og værdien er 5 valgt
selectbox6 har valgmulighederne 1,2,3,4,5,6 og værdien er 6 valgt

(hvis der er 4 selectbokse i stedet for 6 er det kun værdierne 1,2,3,4 der skal være mulige)

nu vælger jeg så at selectbox4 skal have værdien 5 istedet... så skal værdien i selectbox5 skifte til 4 således at de forskellige selectboxe stadig har forskellig værdi!

hvordan laves sådan en function?

Anders
Avatar billede skovenborg Nybegynder
30. maj 2004 - 21:29 #1
Prøv:
<script type="text/javascript">
var selBoxes = ["form1","sel1","sel2","sel3","sel4","sel5"]; // Første value er navn på form
var setValues = new Array();
function initSelBoxes() {
      for (i=1;i<selBoxes.length;i++) {
            setValues[selBoxes[i]] = document.forms[selBoxes[0]].elements[selBoxes[i]].selectedIndex;
      }
}
function changeValue(selElm) {
      selIndex = selElm.selectedIndex;
      for (i in setValues) {
            if (setValues[i] == selIndex) {
                  document.forms[selBoxes[0]].elements[i].options[setValues[selElm.name]].selected = true;
                  setValues[i] = setValues[selElm.name];
                  setValues[selElm.name] = selIndex;
                  break;
            }
      }
}
</script>
</head>
<body onload="initSelBoxes();">
<form name="form1">
<select name="sel1" onchange="changeValue(this);">
<option value="1" selected="selected">Value 1</option>
<option value="2">Value 2</option>
<option value="3">Value 3</option>
<option value="4">Value 4</option>
<option value="5">Value 5</option>
</select>
<select name="sel2" onchange="changeValue(this);">
<option value="1">Value 1</option>
<option value="2" selected="selected">Value 2</option>
<option value="3">Value 3</option>
<option value="4">Value 4</option>
<option value="5">Value 5</option>
</select>
<select name="sel3" onchange="changeValue(this);">
<option value="1">Value 1</option>
<option value="2">Value 2</option>
<option value="3" selected="selected">Value 3</option>
<option value="4">Value 4</option>
<option value="5">Value 5</option>
</select>
<select name="sel4" onchange="changeValue(this);">
<option value="1">Value 1</option>
<option value="2">Value 2</option>
<option value="3">Value 3</option>
<option value="4" selected="selected">Value 4</option>
<option value="5">Value 5</option>
</select>
<select name="sel5" onchange="changeValue(this);">
<option value="1">Value 1</option>
<option value="2">Value 2</option>
<option value="3">Value 3</option>
<option value="4">Value 4</option>
<option value="5" selected="selected">Value 5</option>
</select>
</form>
</body>
Avatar billede elskermad.dk Nybegynder
30. maj 2004 - 21:34 #2
lige netop sådan :D

hvordan kan jeg så udbygge den således at der kan være forskellig antal selectbokse? det kommer ud af en database, hvis du kan lave det i php ville det bar være fedt :D
Avatar billede skovenborg Nybegynder
30. maj 2004 - 21:34 #3
eller:
var setValues = new Array();
function initSelBoxes(frmName) {
      var frmElm = document.forms[frmName];
      for (i=0;i<frmElm.length;i++) {
            if (frmElm.elements[i].type == "select-one") {setValues[frmElm.elements[i].name] = frmElm.elements[i].selectedIndex;}
      }
}
function changeValue(selElm) {
      selIndex = selElm.selectedIndex;
      for (i in setValues) {
            if (setValues[i] == selIndex) {
                  document.forms[selBoxes[0]].elements[i].options[setValues[selElm.name]].selected = true;
                  setValues[i] = setValues[selElm.name];
                  setValues[selElm.name] = selIndex;
                  break;
            }
      }
}
</script>
</head>
<body onload="initSelBoxes('form1');">

Hvis du gerne vil undgå at indtaste alle selectbox-navnene. Dette antager dog at scriptet skal gælde for alle selectboxene i formen - om det gør nogen forskel ved jeg dog ikke helt.
Avatar billede skovenborg Nybegynder
30. maj 2004 - 21:37 #4
jeg tror det er det seneste jeg skrev, som vil gøre det meget lettere at lave det fx i PHP.

Kan dog ikke give et umiddelbart bud på det da jeg ikke kender til din databasestruktur (navnene osv.). Men hvis du går ud fra det seneste jeg lavede, så skal du blot sørge for at alle selectboxene er udstyret med onchange="changeValue(this);" - og så husk at tilføje <body onload="initSelBoxes('form1');"> i starten.
Avatar billede elskermad.dk Nybegynder
30. maj 2004 - 21:38 #5
okay det vil jeg prøve... du skal have tak indtil! :]
Avatar billede skovenborg Nybegynder
30. maj 2004 - 22:02 #6
smider lige et svar :-)
Avatar billede skovenborg Nybegynder
31. maj 2004 - 00:14 #7
hey fandt lige en fejl:
<script type="text/javascript">
var setValues = new Array();
var frmElm;
function initSelBoxes(frmName) {
      frmElm = document.forms[frmName];
      for (i=0;i<frmElm.length;i++) {
            if (frmElm.elements[i].type == "select-one") {setValues[frmElm.elements[i].name] = frmElm.elements[i].selectedIndex;}
      }
}
function changeValue(selElm) {
      selIndex = selElm.selectedIndex;
      for (i in setValues) {
            if (setValues[i] == selIndex) {
                  frmElm.elements[i].options[setValues[selElm.name]].selected = true;
                  setValues[i] = setValues[selElm.name];
                  setValues[selElm.name] = selIndex;
                  break;
            }
      }
}

</script>
Avatar billede elskermad.dk Nybegynder
31. maj 2004 - 00:17 #8
hvordan skal mine bokse se ud nu?
Avatar billede skovenborg Nybegynder
31. maj 2004 - 00:19 #9
samme - men det var bare en fejl i forhold til den anden løsning hvor man ikke behøvede at definere navnene selv. Du skal såmen bare huske at skrive:
<body onload="initSelBoxes('form1');">
Avatar billede elskermad.dk Nybegynder
12. juni 2004 - 11:34 #10
kan du hjælpe mig lidt med denne function igen skovenborg?? jeg har ikke rigtig fået den til at virke
Avatar billede skovenborg Nybegynder
12. juni 2004 - 14:38 #11
hmm, så må du fortælle mig hvad du gør og hvad fejlen er.

Kig evt. på:
http://skovenborg.1go.dk/javascript/uniqueSelectBoxes.php
hvor jeg har lagt spørgsmålet hen med eksempel
Avatar billede elskermad.dk Nybegynder
12. juni 2004 - 14:43 #12
jeg har fået det til at virke nu... var pga mit php den fejlede lidt :] tak igen
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