Avatar billede mvk Nybegynder
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>
Avatar billede mvk Nybegynder
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'">&nbsp;&nbsp;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'">&nbsp;&nbsp;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'">&nbsp;&nbsp;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'">&nbsp;&nbsp;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'">&nbsp;&nbsp;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'">&nbsp;&nbsp;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'">&nbsp;&nbsp;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'">&nbsp;&nbsp;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'">&nbsp;&nbsp;Producenter</td>
  </tr>
Avatar billede roenving Novice
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];
  }
}
Avatar billede mvk Nybegynder
12. oktober 2004 - 14:41 #3
Avatar billede roenving Novice
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){
Avatar billede mvk Nybegynder
12. oktober 2004 - 14:50 #5
de virker begge 2 - men de folder kun 1 undermenu ud
Avatar billede mvk Nybegynder
12. oktober 2004 - 14:54 #6
den oprindelige foldede menuerne der ikke blev brugt sammen når den foldede en ny menu ud
Avatar billede mvk Nybegynder
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'">&nbsp;&nbsp;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'">&nbsp;&nbsp;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'">&nbsp;&nbsp;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'">&nbsp;&nbsp;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'">&nbsp;&nbsp;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'">&nbsp;&nbsp;Visninger</td>
  </tr>
........ fortsættes
Avatar billede roenving Novice
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];
  }
}
Avatar billede mvk Nybegynder
12. oktober 2004 - 15:15 #9
det spiller :)  men den lukker ikke menuen hvis man klikker på et andet punkt
Avatar billede roenving Novice
12. oktober 2004 - 15:21 #10
Næh, men det gjorde den anden jo heller ikke !-)
Avatar billede roenving Novice
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];
  }
}
Avatar billede mvk Nybegynder
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)
Avatar billede roenving Novice
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'">&nbsp;&nbsp;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 '-)
Avatar billede mvk Nybegynder
12. oktober 2004 - 16:17 #14
u da man! tak
Avatar billede roenving Novice
12. oktober 2004 - 16:19 #15
-- og tak for point ;~}
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