Avatar billede webnord Novice
11. februar 2005 - 01:49 Der er 10 kommentarer og
1 løsning

udvælge via combobokse/rulleliste

Hejsa

For den lokale fodboldsklub er jeg i gang med at lave en hjemmeside.


Der skal laves en side, hvor træneren kan udtage et hold.
Holdet består af ca 20 mand.
Disse er i en Accessdatabase
Siden til udvælgelse består af 11 combobokser/rullelister
I boks 1 udtages målmanden
I boks 2 udtages venstre back
I boks 3 udtages hjøre back
etc..
Det fungerer ganske fint, men...
Træneren kan vælge samme mand flere gange, hvordan undgås dette?

-/ Falcon
Avatar billede ldanielsen Nybegynder
11. februar 2005 - 09:26 #1
du har 11 select's, lad os sige at de hedder sel1, sel2, sel3 osv.

Så laver du en funktion der checkker om en bestemt person er valgt i forvejen. Jeg antager at der står "Vælg her" eller sådan noget i den øverste:

<script>
function IsSelected(iIndex){
  var f = document.myFormName;
  for (i=1; i<=11; i++){
    if (f["sel" + i].selectedIndex == iIndex) return (true);
    }
  return false;
  }

</script>
Avatar billede ldanielsen Nybegynder
11. februar 2005 - 10:47 #2
Og på hver selectbox laver du en onChange, så hele koden kommer til at se sådan ud (den function jeg sendte sidst er også ændret):

<select onChange="checkIfSelected(this, this.form);">

og:
<script>

function checkIfSelected(objSelect, objForm){
  if (IsSelected(objSelect.selectedIndex, objForm)){
    alert("Er udtaget!");
    objSelect.options[0].selected = true;
    }
  }

function IsSelected(iIndex, objForm){
  for (i=1; i<=11; i++){
    if (objForm["sel" + i].selectedIndex == iIndex) return (true);
    }
  return false;
  }

</script>

Hvis det ikke spiller, så post hele koden til mig, så finder jeg ud af det
Avatar billede webnord Novice
11. februar 2005 - 12:29 #3
øhh

var vist lige tidlig ude med mit spm.

Jeg skal lave 11 combobokse
Målmand : combobox
venstre bak: combobox
højre bak: combobox
etc..
jeg kan kun lave en combobox, så hvordan laves flere i samme opslag?

har flg:
<form>
<%
Set tempConn = Server.CreateObject("ADODB.Connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../../../../database/xxx.mdb")
tempConn.Open strDSN
strSQL = "SELECT * FROM hold ORDER By id"
Set rs = tempConn.Execute(strSQL)
Response.Write "<select name=dropdown size=1>"
Do While Not rs.EOF
  Response.Write "<option value=" & rs("id") & ">" & rs("navn") & "</option>"
  rs.MoveNext
Loop
Response.Write "</select>"
tempConn.Close
Set tempConn = Nothing
%>
</form>
Avatar billede ldanielsen Nybegynder
11. februar 2005 - 12:36 #4
De 11 bokse skal være (næsten) ens, så jeg ville nok gøre sådan (i uddrag):

strSelect = "<select name=sel§§index§§ size=1>"
Do While Not rs.EOF
  strSelect = strSelect & "<option value=" & rs("id") & ">" & rs("navn") & "</option>"
  rs.MoveNext
Loop
strSelect = strSelect & "</select>"

'Nu er der en selectbox i variablen strSelect, og den kan jeg så
'udskrive 11 gange. Jeg har angivet name til "sel§§index§§", og jeg
'erstatter så §§index§§ med et tal:

for i = 1 to 11
  Response.Write(Replace(strSelect, "§§index§§", i))
  Response.Write("<br>")
next


Se lidt på det, så tror jeg at du selv får ideerne.
Avatar billede webnord Novice
11. februar 2005 - 12:46 #5
ok tak, virker perfekt,
Men nu kommer jeg til 1. del af spm.
Træneren kan vælge samme mand flere gange, hvordan undgås dette?

har flg.

<%
Set tempConn = Server.CreateObject("ADODB.Connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../../../../database/xxx.mdb")
tempConn.Open strDSN
strSQL = "SELECT * FROM hold ORDER By id"
Set rs = tempConn.Execute(strSQL)
strSelect = "<select name=sel§§index§§ size=1>"
Do While Not rs.EOF
  strSelect = strSelect & "<option value=" & rs("id") & ">" & rs("navn") & "</option>"
  rs.MoveNext
Loop
strSelect = strSelect & "</select>"

for i = 1 to 5
  Response.Write(Replace(strSelect, "§§index§§", i))
  Response.Write("<br>")
next

tempConn.Close
Set tempConn = Nothing
%>
</form>
Avatar billede ldanielsen Nybegynder
11. februar 2005 - 13:45 #6
strSelect = "<select name=sel§§index§§ size=1>"

skal være

strSelect = "<select name=sel§§index§§ size=1 onchange=""checkIfSelected(this, this.form);"">"

Og følgende sættes ind, gerne lige før "</head>":

<script>

function checkIfSelected(objSelect, objForm){
  if (IsSelected(objSelect.selectedIndex, objForm)){
    alert("Er udtaget!");
    objSelect.options[0].selected = true;
    }
  }

function IsSelected(iIndex, objForm){
  for (i=1; i<=11; i++){
    if (objForm["sel" + i].selectedIndex == iIndex) return (true);
    }
  return false;
  }

</script>

Hvis det ikke spiller, så tage en vis kilde i browseren, post hele koden hertil, så finder jeg ud af det
Avatar billede webnord Novice
12. februar 2005 - 00:51 #7
Spiller ikke, når jeg i combo 1 vælger et navn, kommer alert'en

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta http-equiv="Pragma" content="no_cache">
<meta http-equiv="imagetoolbar" content="no">
<meta http-equiv="imagetoolbar" content="false">
<title>..:: It-Nordjylland ::..</title>

<link rel="stylesheet" href="../../../css/style.css" type="text/css" media="screen">
<link rel="stylesheet" href="/print.css" type="text/css" media="print">
<script>

function checkIfSelected(objSelect, objForm){
  if (IsSelected(objSelect.selectedIndex, objForm)){
    alert("Er udtaget!");
    objSelect.options[0].selected = true;
    }
  }

function IsSelected(iIndex, objForm){
  for (i=1; i<=11; i++){
    if (objForm["sel" + i].selectedIndex == iIndex) return (true);
    }
  return false;
  }

</script>


</head>
<body>


<form>
<%
Set tempConn = Server.CreateObject("ADODB.Connection")
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("../../../../database/xxx.mdb")
tempConn.Open strDSN
strSQL = "SELECT * FROM hold ORDER By id"
Set rs = tempConn.Execute(strSQL)
strSelect = "<select name=sel§§index§§ size=1 onchange=""checkIfSelected(this, this.form);"">"

Do While Not rs.EOF
  strSelect = strSelect & "<option value=" & rs("id") & ">" & rs("navn") & "</option>"
  rs.MoveNext
Loop
strSelect = strSelect & "</select>"

for i = 1 to 11
  Response.Write(Replace(strSelect, "§§index§§", i))
  Response.Write("<br>")
next

tempConn.Close
Set tempConn = Nothing
%>
</form>

</body></html>


</body></html>
Avatar billede ldanielsen Nybegynder
14. februar 2005 - 09:33 #8
ok, script-delen skal være sådan (når den checkker om nogle af boksene har samme valg skal den naturligvis springe den aktuelle boks over):

<script>

function checkIfSelected(objSelect, objForm){
  if (IsSelected(objSelect.selectedIndex, objForm, objSelect)){
    alert("Er udtaget!");
    objSelect.options[0].selected = true;
    }
  }

function IsSelected(iIndex, objForm, objSelect){
  if (iIndex > 0){
    for (i=1; i<=3; i++){
      var theSelect = objForm["sel" + i];
      if (theSelect != objSelect && theSelect.selectedIndex == iIndex) return (true);
      }
    }
  return false;
  }

</script>

Du mangler i øvrigt at lave en "tom" option øverst i hver, en " - Vælg her - " option. Den bliver nødvendig, og koden her tager også højde for det
Avatar billede webnord Novice
15. februar 2005 - 02:14 #9
Perfekt
Takker så mange gange
Avatar billede ldanielsen Nybegynder
15. februar 2005 - 08:51 #10
HOV

Jeg har kun haft tre spillere i min test, og glemte at rette det tilbage, så det skal være:
for (i=1; i<=11; i++){

i stedet for
for (i=1; i<=3; i++){

men tak!
Avatar billede webnord Novice
15. februar 2005 - 13:38 #11
fandt ud af det
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
Kurser inden for grundlæggende programmering

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