11. oktober 2004 - 09:25
Der er
14 kommentarer og 1 løsning
Kan dette gøres lettere
i stedet for at have 3 funktioner kan man så trække det samme i én så koden bliver mere dynamisk: <script type="text/javascript"> foer = new Array(); function fold(id1, id2) { obj1 = document.getElementById(id1); obj2 = document.getElementById(id2); if (foer.length > 0 && foer[0] != obj1 && foer[1] != obj2) { foer[0].style.display = "none"; foer[1].style.display = "none"; } obj1.style.display = (obj1.style.display == "none") ? "inline" : "none"; obj2.style.display = (obj2.style.display == "none") ? "inline" : "none"; foer = new Array(obj1, obj2); } foer3 = new Array(); function fold3(id31, id32, id33) { obj31 = document.getElementById(id31); obj32 = document.getElementById(id32); obj33 = document.getElementById(id33); if (foer3.length > 0 && foer3[0] != obj31 && foer3[1] != obj32 && foer3[2] != obj33) { foer3[0].style.display = "none"; foer3[1].style.display = "none"; foer3[2].style.display = "none"; } obj31.style.display = (obj31.style.display == "none") ? "inline" : "none"; obj32.style.display = (obj32.style.display == "none") ? "inline" : "none"; obj33.style.display = (obj33.style.display == "none") ? "inline" : "none"; foer3 = new Array(obj31, obj32, obj33); } foer4 = new Array(); function fold4(id41, id42, id43, id44) { obj41 = document.getElementById(id41); obj42 = document.getElementById(id42); obj43 = document.getElementById(id43); obj44 = document.getElementById(id44); if (foer4.length > 0 && foer4[0] != obj41 && foer4[1] != obj42 && foer4[2] != obj43 && foer4[3] != obj44) { foer4[0].style.display = "none"; foer4[1].style.display = "none"; foer4[2].style.display = "none"; foer4[3].style.display = "none"; } obj41.style.display = (obj41.style.display == "none") ? "inline" : "none"; obj42.style.display = (obj42.style.display == "none") ? "inline" : "none"; obj43.style.display = (obj43.style.display == "none") ? "inline" : "none"; obj44.style.display = (obj44.style.display == "none") ? "inline" : "none"; foer4 = new Array(obj41, obj42, obj43, obj44); } </script>
Annonceindlæg fra Lemonet
11. oktober 2004 - 10:56
#1
kode eksempel på menuen: <td height="25" class="10BlackBold" style="border-top:1px dashed #CCCCCC;cursor: pointer;" onclick="fold4('nr1', 'nr2', 'nr3', 'nr4'); return false;" onMouseOver="java script:style.background='#EFEFEF'" onMouseOut="java script:style.background='#FFFFFF'"> Salg</td> </tr> <tr id="nr1" style="display: none;"> <td height="25" class="10BlackNormal" style="border-top:1px dashed #CCCCCC;cursor: pointer;" onClick="MM_goToURL('parent','../rapporter/salg_produkter.asp');return document.MM_returnValue" onMouseOver="java script:style.background='#EFEFEF'" onMouseOut="java script:style.background='#FFFFFF'"> Produkter</td> </tr> <tr id="nr2" style="display: none;"> <td height="25" class="10BlackNormal" style="border-top:1px dashed #CCCCCC;cursor: pointer;" onClick="MM_goToURL('parent','../rapporter/salg_produktgrupper.asp');return document.MM_returnValue" onMouseOver="java script:style.background='#EFEFEF'" onMouseOut="java script:style.background='#FFFFFF'"> Produktgrupper</td> </tr> <tr id="nr3" style="display: none;"> <td height="25" class="10BlackNormal" style="border-top:1px dashed #CCCCCC;cursor: pointer;" onClick="MM_goToURL('parent','../rapporter/salg_producenter.asp');return document.MM_returnValue" onMouseOver="java script:style.background='#EFEFEF'" onMouseOut="java script:style.background='#FFFFFF'"> Producenter</td> </tr> <tr id="nr4" style="display: none;"> <td height="25" class="10BlackNormal" style="border-top:1px dashed #CCCCCC;cursor: pointer;" onClick="MM_goToURL('parent','../rapporter/salg_kunder.asp');return document.MM_returnValue" onMouseOver="java script:style.background='#EFEFEF'" onMouseOut="java script:style.background='#FFFFFF'"> Kunder</td> </tr> <tr> <td height="25" class="10BlackBold" style="border-top:1px dashed #CCCCCC;cursor: pointer;" onclick="fold3('nr5', 'nr6', 'nr7'); return false;" onMouseOver="java script:style.background='#EFEFEF'" onMouseOut="java script:style.background='#FFFFFF'"> Visninger</td> </tr> <tr id="nr5" style="display: none;"> <td height="25" class="10BlackNormal" style="border-top:1px dashed #CCCCCC;cursor: pointer;" onClick="MM_goToURL('parent','../rapporter/visninger_produkter.asp');return document.MM_returnValue" onMouseOver="java script:style.background='#EFEFEF'" onMouseOut="java script:style.background='#FFFFFF'"> Produkter</td> </tr> <tr id="nr6" style="display: none;"> <td height="25" class="10BlackNormal" style="border-top:1px dashed #CCCCCC;cursor: pointer;" onClick="MM_goToURL('parent','../rapporter/visninger_produktgrupper.asp');return document.MM_returnValue" onMouseOver="java script:style.background='#EFEFEF'" onMouseOut="java script:style.background='#FFFFFF'"> Produktgrupper</td> </tr> <tr id="nr7" style="display: none;"> <td height="25" class="10BlackNormal" style="border-top:1px dashed #CCCCCC;cursor: pointer;" onClick="MM_goToURL('parent','../rapporter/visninger_producenter.asp');return document.MM_returnValue" onMouseOver="java script:style.background='#EFEFEF'" onMouseOut="java script:style.background='#FFFFFF'"> Producenter</td> </tr>
11. oktober 2004 - 16:44
#2
Måske (og aldeles utestet, da jeg kun har tilrettet her i feltet !-) var foer = new Array(),obj = new Array(); function fold() { var a = fold.arguments,l = a.length,t = false; if(l<2)return; for(i=0;l>i;i++){ obj[i] = document.getElementById(a[i]); } if (foer[l-2].length > 0){ for(i=0;l>i;i++)t = t || foer[l-2][i] == obj[i]; if(!t){ for(i=0;l>i;i++){ foer[i].style.display = "none"; } } } for(i=0;l>i;i++){ obj[i].style.display = (obj[i].style.display != "inline") ? "inline" : "none"; foer[l-2][i] = obj[i]; } }
12. oktober 2004 - 14:41
#3
12. oktober 2004 - 14:47
#4
Prøv at udskifte denne linje: if (foer[l-2].length > 0){ med denne: if (foer[l-2] && foer[l-2].length > 0){ eller måske denne: if (foer.length > 0 && foer[l-2].length > 0){
12. oktober 2004 - 14:50
#5
de virker begge 2 - men de folder kun 1 undermenu ud
12. oktober 2004 - 14:54
#6
den oprindelige foldede menuerne der ikke blev brugt sammen når den foldede en ny menu ud
12. oktober 2004 - 14:55
#7
det kan også være jeg laver koden til menupunkterne forkert: <tr> <td height="25" class="10BlackBold" style="border-top:1px dashed #CCCCCC;cursor: pointer;" onclick="fold('nr1', 'nr2', 'nr3', 'nr4'); return false;" onMouseOver="java script:style.background='#EFEFEF'" onMouseOut="java script:style.background='#FFFFFF'"> Salg</td> </tr> <tr id="nr1" style="display: none;"> <td height="25" class="10BlackNormal" style="border-top:1px dashed #CCCCCC;cursor: pointer;" onClick="MM_goToURL('parent','../rapporter/salg_produkter.asp');return document.MM_returnValue" onMouseOver="java script:style.background='#EFEFEF'" onMouseOut="java script:style.background='#FFFFFF'"> Produkter</td> </tr> <tr id="nr2" style="display: none;"> <td height="25" class="10BlackNormal" style="border-top:1px dashed #CCCCCC;cursor: pointer;" onClick="MM_goToURL('parent','../rapporter/salg_produktgrupper.asp');return document.MM_returnValue" onMouseOver="java script:style.background='#EFEFEF'" onMouseOut="java script:style.background='#FFFFFF'"> Produktgrupper</td> </tr> <tr id="nr3" style="display: none;"> <td height="25" class="10BlackNormal" style="border-top:1px dashed #CCCCCC;cursor: pointer;" onClick="MM_goToURL('parent','../rapporter/salg_producenter.asp');return document.MM_returnValue" onMouseOver="java script:style.background='#EFEFEF'" onMouseOut="java script:style.background='#FFFFFF'"> Producenter</td> </tr> <tr id="nr4" style="display: none;"> <td height="25" class="10BlackNormal" style="border-top:1px dashed #CCCCCC;cursor: pointer;" onClick="MM_goToURL('parent','../rapporter/salg_kunder.asp');return document.MM_returnValue" onMouseOver="java script:style.background='#EFEFEF'" onMouseOut="java script:style.background='#FFFFFF'"> Kunder</td> </tr> <tr> <td height="25" class="10BlackBold" style="border-top:1px dashed #CCCCCC;cursor: pointer;" onclick="fold('nr5', 'nr6', 'nr7'); return false;" onMouseOver="java script:style.background='#EFEFEF'" onMouseOut="java script:style.background='#FFFFFF'"> Visninger</td> </tr> ........ fortsættes
12. oktober 2004 - 15:08
#8
Næh, men ved nærmere granskning kan jeg se, at der opstår en fejl, fordi andengenerations-arrays ikke er deklareret !-) Så: var foer = new Array(),obj = new Array(); function fold() { var a = fold.arguments,l = a.length,t = false; if(l<2)return; for(i=0;l>i;i++){ obj[i] = document.getElementById(a[i]); } if (foer[l-2] && foer[l-2].length > 0){ for(i=0;l>i;i++)t = t || foer[l-2][i] == obj[i]; if(!t){ for(i=0;l>i;i++){ foer[i].style.display = "none"; } } } if(!foer[l-2])foer[l-2] = new Array(); for(i=0;l>i;i++){ obj[i].style.display = (obj[i].style.display != "inline") ? "inline" : "none"; foer[l-2][i] = obj[i]; } }
12. oktober 2004 - 15:15
#9
det spiller :) men den lukker ikke menuen hvis man klikker på et andet punkt
12. oktober 2004 - 15:21
#10
Næh, men det gjorde den anden jo heller ikke !-)
12. oktober 2004 - 15:27
#11
Prøv sådan så: var foer = new Array(),obj = new Array(); function fold() { var a = fold.arguments,l = a.length,t = false; if(l<2)return; for(i=0;l>i;i++){ obj[i] = document.getElementById(a[i]); } for(j=0;foer.length>j;j++){ t =false; if (foer[j] && foer[j].length > 0){ for(i=0;foer[j].length>i;i++){ if(typeof foer[j][i] == 'object')foer[j][i].style.display = "none"; } } } if(!foer[l-2])foer[l-2] = new Array(); for(i=0;l>i;i++){ obj[i].style.display = (obj[i].style.display != "inline") ? "inline" : "none"; foer[l-2][i] = obj[i]; } }
12. oktober 2004 - 15:47
#12
du er for vild :) - så kører det tusinde tak for hjælpen et retorisk spørgsmål: vil denne kode kunne gøres dynamisk i forhold til en database ? (har to tabeller med Produktgrupper og Producenter som jeg på sigt kunne tænke mig at lave en dynamisk menu ud af)
12. oktober 2004 - 16:04
#13
Hvis du kalder spørgsmålet retorisk, så ved du at svaret er ja, og så kunne du jo ligsågodt have spurgt: hvordan ?-) F.eks. sådan: var foer = new Array(),obj = new Array(); foer['products'] = new Array(),foer['producents'] = new Array(); function fold() { var a = fold.arguments,l = a.length,p = a[0]; if(l<3)return; for(i=1;l>i;i++){ obj[i-1] = document.getElementById(a[i]); } for(j=0;foer[p].length>j;j++){ if (foer[p][j] && foer[p][j].length > 0){ for(i=0;foer[p][j].length>i;i++){ if(typeof foer[p][j][i] == 'object')foer[p][j][i].style.display = "none"; } } } if(!foer[p][l-3])foer[p][l-3] = new Array(); for(i=0;l-1>i;i++){ obj[i].style.display = (obj[i].style.display != "inline") ? "inline" : "none"; foer[p][l-3][i] = obj[i]; } } -- og så kalde med: <td height="25" class="10BlackBold" style="border-top:1px dashed #ccc;cursor: pointer;" onclick="fold('products','nr1', 'nr2', 'nr3', 'nr4'); return false;" onmouseover="this.style.background='#efefef'" onmouseout="this.style.background='#fff'"> Salg</td> Bemærk også, at jeg har fjernet den grimme (og principielt fejlagtige !-) java script: -ting ... -- og tilføjet this. da den principielt skal være der (jeg har aldrig prøvet at udelade den, så jeg ved intet om i hvilke browsere/konfigurationer, den vil fejle !-) -- og velbekomme '-)
12. oktober 2004 - 16:17
#14
u da man! tak
12. oktober 2004 - 16:19
#15
-- og tak for point ;~}
Vi tilbyder markedets bedste kurser inden for webudvikling