webForumDet fria alternativet

Menyproblem

6 svar · 324 visningar · startad av corona

coronaMedlem sedan feb. 200470 inlägg
#1

Har lite problem med en meny som ska visa undermenyer kopplade till en accessdatabas. Ser undermenyn bara en superkort stund sedan försvinner den. Fast tittar jag i koden så finns den där. Nu undrar jag om någon kan hjälpa mig med vad som är galet.
Här är min kod:

<script language="javascript"> 
var oldmenu = ""; 

function menu(strmenu) { 
    
    if(strmenu != ""){
         if(document.getElementById(strmenu).style.display=='none') { 
             document.getElementById(strmenu).style.display='' 
        } 
         else document.getElementById(strmenu).style.display='none' 
    }  
 
    if(oldmenu > ""){
        
        if(oldmenu != strmenu){ 
            // annan meny, göm den gamla. 
             document.getElementById(oldmenu).style.display='none'; 
         } 
      } 

    oldmenu = strmenu; 
}

</SCRIPT>
</head>
<body>
<table>
<tr>
<% 			
	Set RecSet = Server.CreateObject("ADODB.Recordset")
 	Visa = "SELECT * FROM Kategorier ORDER BY Omrade ASC"
	RecSet.Open Visa, DB, adOpenForwardOnly, adLockReadOnly
	
	Do Until RecSet.EOF
	If RecSet("UnderOmrade") = False Then %>
<td><SPAN OnClick="menu('');"><a href="visa.asp?ID=<%=RecSet("ID")%>"><%=RecSet("Omrade")%></a></SPAN></td>
<% Else %>
<td><SPAN OnClick="menu('<%=RecSet("ID")%>');"><a href="meny_test_db.asp?Val=UnderMeny&ID=<%=RecSet("ID")%>"><%=RecSet("Omrade")%></a></SPAN></td>
<% 	End If
	RecSet.MoveNext
	Loop
	RecSet.Close
	Set RecSet = Nothing
%>
</tr>
</table>
<!-- *********** VISA UNDERMENYER *************** -->
<% If Request("Val") = "UnderMeny" Then %>
<table bgcolor="#FF0000">
<tr>
<td>
<% 	 
	Dim IDomrade
	IDomrade = Request("ID")
	
	Set RecSet = Server.CreateObject("ADODB.Recordset")
 	Hamta = "SELECT * FROM UnderKategorier WHERE omradeID = " & IDomrade & " ORDER BY UnderOmrade ASC"
	RecSet.Open Hamta, DB, adOpenForwardOnly, adLockReadOnly
%>
<SPAN STYLE="display: none" ID="<%=IDomrade%>">
	
<% 	Do Until RecSet.EOF
	Response.Write RecSet("UnderOmrade") & " | "
	RecSet.MoveNext
	Loop
	RecSet.Close
 	Set RecSet = Nothing	
 %>	 
</SPAN>     
</td>
</tr>
</table>
<% End If %>    
<!-- *********** VISA SLUT UNDERMENYER *************** -->

Blir jätteglad om någon kan tipsa mig om vad som är fel.
Undermenyerna är inte länkade ännu eftersom jag har bett.
/Annette

@ndersMedlem sedan juni 200026 914 inlägg
#2

Såsom du beskriver problemet verkar det ha att göra med javascript, eftersom asp-koden har skickat menyerna till webbläsaren.

Har du en URL där vi kan titta?

coronaMedlem sedan feb. 200470 inlägg
#3

Nu har jag lagt ut den på mitt webbhotell
URL är http://www.netanet.net/test/meny_test_db.asp

@ndersMedlem sedan juni 200026 914 inlägg
#4

Du har helt klart javascript-problem.

onclick på dina <span>-element nollas av att du klickar på länken i elementet. Det är det som gör att det blinkar till. Först tänds lagret, och sedan laddas sidan om med en querystring. Du har gjort något konstigt mellanting av meny. Om du ska länka till sidan med en querystring för att hämta rätt undermeny, då behöver du inte använda javascript alls. Om du vill använda javascriptet för att fint och snabbt öppna undermenyer, då får du hämta alla undermenyer när sidan laddas, lägga dem i olika <span> / <div>-element och ta bort länkarna som gör att sidan laddas om.

Edit: Dessutom ska du inte namnge dina element med bara siffror. Se till att ID:t börjar med en bokstav istället.

mvh

coronaMedlem sedan feb. 200470 inlägg
#5

Tack för ditt svar och nu har jag försökt att ladda alla menyer och undermenyer på en gång. Fast jag får det inte att fungera helt.
Den laddar bara en undermeny till en meny och jag har en till undermeny som inte ladddas.
Känns som jag skulle vilja att två loopar när undermenyerna anropas, men det kanske inte går eller???

Min nya kod:

<script language="javascript"> 
var oldmenu = ""; 

function menu(strmenu) { 
    
    if(strmenu != ""){
         if(document.getElementById(strmenu).style.display=='none') { 
             document.getElementById(strmenu).style.display='' 
        } 
         else document.getElementById(strmenu).style.display='none' 
    }  
 
    if(oldmenu > ""){
        
        if(oldmenu != strmenu){ 
            // annan meny, göm den gamla. 
             document.getElementById(oldmenu).style.display='none'; 
         } 
      } 

    oldmenu = strmenu; 
}

</SCRIPT>
</head>
<body>
<table>
<tr>
<% 			
	Set RecSet = Server.CreateObject("ADODB.Recordset")
 	Visa = "SELECT * FROM Kategorier ORDER BY Omrade ASC"
	RecSet.Open Visa, DB, adOpenForwardOnly, adLockReadOnly
	
	Do Until RecSet.EOF
	If RecSet("UnderOmrade") = False Then %>
<td><SPAN OnClick="menu('');"><a href="meny_test_db.asp"><%=RecSet("Omrade")%></a></SPAN></td>
<% Else %>
<td><SPAN OnClick="menu('Val<%=RecSet("ID")%>');"><a href="#"><%=RecSet("Omrade")%></a></SPAN></td>
<% 	End If
	RecSet.MoveNext
	Loop
	RecSet.Close
	Set RecSet = Nothing
%>
</tr>
</table>
<!-- *********** VISA UNDERMENYER *************** -->
<table bgcolor="#FF0000">
<tr>
<td>
<% 	 
	Set RecSet = Server.CreateObject("ADODB.Recordset")
	Visa = "SELECT UnderKategorier.omradeID,UnderKategorier.UnderOmrade FROM Kategorier INNER JOIN UnderKategorier ON Kategorier.ID = UnderKategorier.OmradeID " &_
	"WHERE Kategorier.UnderOmrade = True "		
	RecSet.Open Visa, DB, adOpenStatic, adLockOptimistic
	
%>
<SPAN STYLE="display: none" ID="Val<%=RecSet("omradeID")%>">
	
<% 	Do Until RecSet.EOF
	Response.Write RecSet("UnderOmrade") & " | "
	RecSet.MoveNext
	Loop
%>	
</SPAN>
<%	
	RecSet.Close
 	Set RecSet = Nothing
 %>	 

</td>
</tr>
</table>

Jag vill så gärna ha huvudmenyerna horisontellt i en tabell och undermenyerna (horsontellt även de) i en separat tabell under huvudmenyerna.
Men det är kanske svårt.
Tacksam för lite hjälp igen.

/Annette

@ndersMedlem sedan juni 200026 914 inlägg
#6

Håll gärna http://www.netanet.net/test/meny_test_db.asp uppdaterad, så får vi överblick över både koden som skapar allt, och resultatet. :)

Allt går att lösa som du vill ha det, det är inte direkt råcket sajens. Det gäller bara att hålla tålamodet uppe. :bire

coronaMedlem sedan feb. 200470 inlägg
#7

Tack!
Nej, jag ska inte ge mig :)
Men känner att jag måste få lite hjälp innan allt hår står rakt upp :)
Har tankat ut filen igen och ser att jag även får ett javascriptfel.

/Annette

130 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
128 ms — hämta tråd, inlägg och bilagor (db)