Avatar billede mik Nybegynder
02. august 2005 - 08:57 Der er 2 kommentarer og
1 løsning

Klapsammen Menu

Nedenstående kode indgå i en menu, hvor jeg har problemer men 2 ting.

Som den er nu, er den opbygget med nogle "Quicklinks" øverst. Dvs menupunkter hvor der ingen tilhørende underpunkter er. Nederst i menuen er der menupunkter med tilhørende underpunkter. Når man klikker på et af dissse underpunkter foldes menuen ud. Når man efter følgende klikker på et andet undermenupunkt folder det forrige sig sammen og det nye sig ud. Ganske smart, men nu kommer problemet. Hvis man herefter klikker på et af de øverste menupunkter, altså et uden underpunkter, folder det nylig klikkede menupunkt sig ikke sammen. Det vil jeg gerne have hjælp til at den gør.

Det andet problem er, at når der er et menupunkt med underpunkter er der et plus foran menuteksten (grafikfil). Når det så folder sig ud vil jeg gerne have den til at ændre sig til et minus. Samtidig når det folder sig sammen igen skal det blive til et plus. Kan det lade sig gøre?.

**************************************************************
<!-- #INCLUDE FILE="inc.asp" -->
<%
u_user=request.querystring("u_user")
' assigns the variable u_number to the value
' that u_value contains in the url
%>
<%
varUser=request.form("u_user")
%>
<HTML>
<HEAD>
<LINK rel="stylesheet" type="text/css" href="style.css">
<title>Links <%= u_user %></title>
<base target="main">

<script>
foer = null;

function highlight(lnk) {
if (foer)
foer.style.color = "#FFFFFF";
lnk.style.color = "#FFFF00";
foer = lnk;
}
</script>

<SCRIPT>
function MenuClick(tal) {
var tal_str = "" + tal
var tal_arr = tal_str.split(",")
var y = document.all("txt_" + tal_arr[0]);
var lukket = "True"
if(y.style.display == ''){
  lukket = "False"
}
  var x=document.getElementsByTagName("DIV")
  for (i = 0; i < x.length; i++){
      x[i].style.display = 'none'
  }
  if(lukket == "True"){
    var txt = document.all("txt_" + tal_arr[0]);
    txt.style.display = '';
  }
  for (i=1; i<tal_arr.length; i++){
    var txt = document.all("txt_" + tal_arr[i]);
    txt.style.display = '';
  }
}
</SCRIPT>



</HEAD>
<body class="menu<%= u_user %>">


<%
Dim varUser
varUser = u_user

LavDatabase Conntemp

SQL = "SELECT ID, Navn, Link, User, Target, Beskrivelse  FROM Menu WHERE MenuID < 0 and User= ('" & varUser & "') ORDER BY [Order]"

Call OpenRS(Conntemp,SQL,RS)
   
If RS.BOF AND RS.EOF Then
    Response.Write "FEJL"
Else
    RS.MoveFirst
    While Not RS.EOF
        Response.Write "<A class=menu" & varUser & " HREF=""" & RS("Link") & """ OnClick=""highlight(this);MenuClick(" & RS("ID") & ");"" TARGET=""" & RS("Target") & """>" & RS("Navn") & "</A>"&vbCrLf 
    RS.MoveNext
    Wend
End If
LukDatabase Conntemp
%>



<br>
<b><font size="4">&nbsp;<u>Undermenuer</u></font></b><br>
<br>


<%
Function BygMenu(MenuID)
    OverSQL = "SELECT ID, Navn, Link, User, Target, Beskrivelse FROM Menu WHERE MenuID = 0 and User= ('" & varUser & "') ORDER BY [Order]"
    Call OpenRS(Conntemp,OverSQL,UnderRS)
   
    While Not UnderRS.EOF
    Response.Write "<A class=menu" & varUser & " HREF=""" & UnderRS("Link") & """ TARGET="""">" & UnderRS("Navn") & ""

        Response.Write "<A HREF=""#"" OnClick=""MenuClick('" & UnderRS("ID") & "," & Liste & "');highlight(this);""><B>" & UnderRS("Navn") & "</B></A><BR>"&vbCrLf

    UnderRS.MoveNext
    Wend

End Function

Function BygUnderMenu(MenuID,Liste)
  UnderSQL = "SELECT ID, Navn, Link, User, Target, Beskrivelse FROM Menu WHERE MenuID = " & MenuID & " and User= ('" & varUser & "') ORDER BY [Order]"
Call OpenRS(Conntemp,UnderSQL,UnderRS)
Response.Write "<DIV ID=""txt_" & MenuID & """ STYLE=""display: none; margin-left: 10px;"">"&vbCrLf
  While Not UnderRS.EOF
  If CountSubs(UnderRS("ID")) > 0 Then
    Response.Write "<A class=menu" & varUser & " HREF=""fra_main.htm"" OnClick=""MenuClick('" & UnderRS("ID") & "," & Liste & "');highlight(this);""><B><img src=""images/plus.gif"" width=13 height=12 border=0>" & UnderRS("Navn") & "</B></A>"&vbCrLf
    Liste = UnderRS("ID") & "," & Liste
    Call BygUnderMenu (UnderRS("ID"), Liste)
'Til hvert underkald fjernes hovedet af listen så rekursiviteten kører   
  temp = Split(Liste,",")
  if UBound(temp) > 0 then
    nyListe = ""
    temp = Split(Liste,",")
    for t=1 to UBound(temp)
    if t=1 then
      nyListe = temp(t)
    else
      nyListe = nyListe &","& temp(t)
    end if
    next
    Liste = nyListe
  else
    Liste = MenuID
  end if
   
  Else
    Response.Write "<A class=menu" & varUser & " OnClick=""highlight(this);"" HREF=""" & UnderRS("Link") & """ TARGET=""" & UnderRS("Target") & """><img src=""images/leaf.gif"" width=13 height=12 border=0>" & UnderRS("Navn") & "</A>"&vbCrLf
  End If
  UnderRS.MoveNext
  Wend
Response.Write "</DIV>"
End Function


Function CountSubs(MenuID)
    CountSQL = "SELECT ID, User FROM Menu WHERE MenuID = " & MenuID & " and User= ('" & varUser & "')"
    Call OpenRS(Conntemp,CountSQL,CountRS)
    CountSubs = CountRS.RecordCount
End Function

LavDatabase Conntemp

SQL = "SELECT ID, Navn, Link, User, Target, Beskrivelse  FROM Menu WHERE MenuID = 0 and User= ('" & varUser & "') ORDER BY [Order]"


Call OpenRS(Conntemp,SQL,RS)

If RS.BOF AND RS.EOF Then
    Response.Write "Ingen data"
Else
    RS.MoveFirst
        While Not RS.EOF
            If CountSubs(RS("ID")) > 0 Then
                Response.Write "<A class=menu" & varUser & " HREF=""fra_main.htm""  TARGET=" & RS("Target") & " OnClick=""MenuClick(" & RS("ID") & ");highlight(this);""><B><img src=""images/plus.gif"" width=13 height=12 border=0>" & RS("Navn") & "</B></A>"&vbCrLf
                Call BygUnderMenu (RS("ID"),RS("ID"))
            Else
                Response.Write "<A class=menu" & varUser & " HREF=""" & RS("Link") & """><img src=""images/leaf.gif"" width=13 height=12 border=0>" & RS("Navn") & "</A>"&vbCrLf
            End If
            RS.MoveNext
        Wend
End If

   
LukDatabase Conntemp
%>

</BODY>
</HTML>
Avatar billede busschou Praktikant
02. august 2005 - 21:50 #1
Synes jeg har hjulpet dig med din menu før
Så jeg har kigget lidt nærmere på det :o)
Jeg har givet alle billederne et Id tilsvarende det id der allerede benyttes
I scriptet har jeg gjort så det først laver alle minusser om til plusser, og dernæst laver de plusser om til minusser som skal vises
Jeg har tilføjet en lukke funtion som lukker det hele
Denne funktion kaldes på dine øverste links, hvorved de lukker menuen
Håber det giver den ønskede effekt hos dig som det gør her hos mig :o)
-----
<!-- #INCLUDE FILE="inc.asp" -->
<%
u_user=request.querystring("u_user")
' assigns the variable u_number to the value
' that u_value contains in the url
%>
<%
varUser=request.form("u_user")
%>
<HTML>
<HEAD>
<LINK rel="stylesheet" type="text/css" href="style.css">
<title>Links <%= u_user %></title>
<base target="main">

<script>
foer = null;

function highlight(lnk) {
if (foer)
foer.style.color = "#FFFFFF";
lnk.style.color = "#FFFF00";
foer = lnk;
}
</script>

<SCRIPT>
function MenuClick(tal) {
  var tal_str = "" + tal
  var tal_arr = tal_str.split(",")
  var y = document.getElementById("txt_" + tal_arr[0]);
  var lukket = true;
  if(y.style.display == ''){
    lukket = false;
  }
  LukMenu();
  if(lukket){
    y.style.display = '';
    document.getElementById(tal_arr[0]).src = 'images/minus.gif';
  }
  for (i=1; i<tal_arr.length; i++){
    var txt = document.getElementById("txt_" + tal_arr[i]);
    txt.style.display = '';
    var img = document.getElementById(tal_arr[i]);
    img.src = 'images/minus.gif';
  }
}
function LukMenu(){
  var x=document.getElementsByTagName("DIV")
  for (i = 0; i < x.length; i++){
    x[i].style.display = 'none'
  }
  x = document.getElementsByTagName("IMG")
  for (i = 0; i < x.length; i++){
  var src_arr = x[i].src.split("/")
  if (src_arr[src_arr.length-1] == 'minus.gif'){
    x[i].src = 'images/plus.gif'
  }
  }
}
</SCRIPT>



</HEAD>
<body class="menu<%= u_user %>">


<%
Dim varUser
varUser = u_user

LavDatabase Conntemp

SQL = "SELECT ID, Navn, Link, User, Target, Beskrivelse  FROM Menu WHERE MenuID < 0 and User= ('" & varUser & "') ORDER BY [Order]"

Call OpenRS(Conntemp,SQL,RS)
   
If RS.BOF AND RS.EOF Then
    Response.Write "FEJL"
Else
    RS.MoveFirst
    While Not RS.EOF
        Response.Write "<A class=menu" & varUser & " HREF=""" & RS("Link") & """ OnClick=""highlight(this);LukMenu();"" TARGET=""" & RS("Target") & """>" & RS("Navn") & "</A>"&vbCrLf 
    RS.MoveNext
    Wend
End If
LukDatabase Conntemp
%>



<br>
<b><font size="4">&nbsp;<u>Undermenuer</u></font></b><br>
<br>


<%
Function BygMenu(MenuID)
    OverSQL = "SELECT ID, Navn, Link, User, Target, Beskrivelse FROM Menu WHERE MenuID = 0 and User= ('" & varUser & "') ORDER BY [Order]"
    Call OpenRS(Conntemp,OverSQL,UnderRS)
   
    While Not UnderRS.EOF
    Response.Write "<A class=menu" & varUser & " HREF=""" & UnderRS("Link") & """ TARGET="""">" & UnderRS("Navn") & ""

        Response.Write "<A HREF=""#"" OnClick=""MenuClick('" & UnderRS("ID") & "," & Liste & "');highlight(this);""><B>" & UnderRS("Navn") & "</B></A><BR>"&vbCrLf

    UnderRS.MoveNext
    Wend

End Function

Function BygUnderMenu(MenuID,Liste)
  UnderSQL = "SELECT ID, Navn, Link, User, Target, Beskrivelse FROM Menu WHERE MenuID = " & MenuID & " and User= ('" & varUser & "') ORDER BY [Order]"
Call OpenRS(Conntemp,UnderSQL,UnderRS)
Response.Write "<DIV ID=""txt_" & MenuID & """ STYLE=""display: none; margin-left: 10px;"">"&vbCrLf
  While Not UnderRS.EOF
  If CountSubs(UnderRS("ID")) > 0 Then
    Response.Write "<A class=menu" & varUser & " HREF=""fra_main.htm"" OnClick=""MenuClick('" & UnderRS("ID") & "," & Liste & "');highlight(this);""><B><img id="""&UnderRS("ID")&""" src=""images/plus.gif"" width=13 height=12 border=0>" & UnderRS("Navn") & "</B></A>"&vbCrLf
    Liste = UnderRS("ID") & "," & Liste
    Call BygUnderMenu (UnderRS("ID"), Liste)
'Til hvert underkald fjernes hovedet af listen så rekursiviteten kører   
  temp = Split(Liste,",")
  if UBound(temp) > 0 then
    nyListe = ""
    temp = Split(Liste,",")
    for t=1 to UBound(temp)
    if t=1 then
      nyListe = temp(t)
    else
      nyListe = nyListe &","& temp(t)
    end if
    next
    Liste = nyListe
  else
    Liste = MenuID
  end if
   
  Else
    Response.Write "<A class=menu" & varUser & " OnClick=""highlight(this);"" HREF=""" & UnderRS("Link") & """ TARGET=""" & UnderRS("Target") & """><img src=""images/leaf.gif"" width=13 height=12 border=0>" & UnderRS("Navn") & "</A>"&vbCrLf
  End If
  UnderRS.MoveNext
  Wend
Response.Write "</DIV>"
End Function


Function CountSubs(MenuID)
    CountSQL = "SELECT ID, User FROM Menu WHERE MenuID = " & MenuID & " and User= ('" & varUser & "')"
    Call OpenRS(Conntemp,CountSQL,CountRS)
    CountSubs = CountRS.RecordCount
End Function

LavDatabase Conntemp

SQL = "SELECT ID, Navn, Link, User, Target, Beskrivelse  FROM Menu WHERE MenuID = 0 and User= ('" & varUser & "') ORDER BY [Order]"


Call OpenRS(Conntemp,SQL,RS)

If RS.BOF AND RS.EOF Then
    Response.Write "Ingen data"
Else
    RS.MoveFirst
        While Not RS.EOF
            If CountSubs(RS("ID")) > 0 Then
                Response.Write "<A class=menu" & varUser & " HREF=""fra_main.htm""  TARGET=" & RS("Target") & " OnClick=""MenuClick(" & RS("ID") & ");highlight(this);""><B><img id="""&RS("ID")&""" src=""images/plus.gif"" width=13 height=12 border=0>" & RS("Navn") & "</B></A>"&vbCrLf
                Call BygUnderMenu (RS("ID"),RS("ID"))
            Else
                Response.Write "<A class=menu" & varUser & " HREF=""" & RS("Link") & """><img src=""images/leaf.gif"" width=13 height=12 border=0>" & RS("Navn") & "</A>"&vbCrLf
            End If
            RS.MoveNext
        Wend
End If

   
LukDatabase Conntemp
%>




<br>
<br>
<a class="menuchange" href="content_ch.asp?u_user=<%= u_user %>">Ret menupunkt</a>
<a class="menuchange" href="opret.asp?u_user=<%= u_user %>">Tilføj nyt menupunkt</a>
</BODY>
</HTML>
Avatar billede mik Nybegynder
02. august 2005 - 23:17 #2
Tusind tak. Som du dog kan trylle...
Avatar billede busschou Praktikant
02. august 2005 - 23:19 #3
tryller ryller ri ;o)
ps har lagt svar i det andet spørgsmål også :o)
Håber det hele virker, ellers må du sige til jo
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