---
title: "menyprobs"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/126429-menyprobs"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "dr_damir"
published: "2005-04-14T19:42:00.000Z"
updated: "2005-04-19T17:59:55.000Z"
replies: 5
views: 297
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/126429-menyprobs"
---

# menyprobs

## #1 — dr_damir, 2005-04-14T19:42Z

Tja!

Jag undrar om någon skulle kunna tala om för mig hur man skriver så att menyn börjar med att vara kontraherad.
Om man sedan trycker på en av menyerna så expanderas den.
Om man sedan trycker på en annan menyrad så ska den expanderas medan de som sedan innan varit expanderade kontraheras igen.

Så om man klickar på en ska alla andra dras ihop igen och menyn ska börja med att vara ihopdragen.

Tacksam för all hjälp!

ciao

min kod:

```

<script language=\"JavaScript\">
var currentMenu=false;
var menues=new Array('sub1','sub2','sub3');
function sw(mnu,mode){
        if(mode){
                if(currentMenu){
                        if(currentMenu==mnu){changeStyle(mnu,'display','none');currentMenu=false;}else{changeStyle(currentMenu,'display','none');changeStyle(mnu,'display','block');currentMenu=mnu;}
                } else {
                        changeStyle(mnu,'display','block');currentMenu=mnu;
                }
        } else if (document.getElementById) {
                document.getElementById(mnu).style.display=(document.getElementById(mnu).style.display=='block')?'none':'block';
        }
}
function changeStyle(Id,Property,Value){
        if (document.all){
                eval('document.all[Id].style.'+Property+'=\"'+Value+'\"');
        } else if (document.layers){
                eval('document.layers[Id].'+Property+'=\"'+Value+'\"');
        } else if (document.getElementById){
                eval('document.getElementById(Id).style.'+Property+'=\"'+Value+'\"');
        }
}
function initmenu(){
        for(var n=0;n<menues.length;n++){
                changeStyle(menues[n],'display','none');
        }
}
</script>
```

Permalänk: https://www.webforum.nu/p/126429

## #2 — Peter S, 2005-04-14T20:38Z

Hej!

Börja med att anropa *initMenu()* då sidan laddats klart:

```
<body onload="initMenu()"...
```

På de ställen du anropar *sw()* skickar du in *true* som andra argument:

```
sw('sub1', true)
```

Permalänk: https://www.webforum.nu/p/1592239

## #3 — dr_damir, 2005-04-15T00:51Z

Tack Peter för ett bra svar.
Jag testade förändringarna och pillade vidare men var inte riktigt nöjd.
Så, jag letade vidare och hittade denna koden:

```
<script type=\"text/javascript\">

// Node Functions

if(!window.Node){
        var Node = {ELEMENT_NODE : 1, TEXT_NODE : 3};
}
function checkNode(node, filter){
        return (filter == null || node.nodeType == Node[filter] || node.nodeName.toUpperCase() == filter.toUpperCase());
}
function getChildren(node, filter){
        var result = new Array();
        var children = node.childNodes;
        for(var i = 0; i < children.length; i++){
                if(checkNode(children[i], filter)) result[result.length] = children[i];
        }
        return result;
}
function getChildrenByElement(node){
        return getChildren(node, \"ELEMENT_NODE\");
}
function getFirstChild(node, filter){
        var child;
        var children = node.childNodes;
        for(var i = 0; i < children.length; i++){
                child = children[i];
                if(checkNode(child, filter)) return child;
        }
        return null;
}
function getFirstChildByText(node){
        return getFirstChild(node, \"TEXT_NODE\");
}
function getNextSibling(node, filter){
        for(var sibling = node.nextSibling; sibling != null; sibling = sibling.nextSibling){
                if(checkNode(sibling, filter)) return sibling;
        }
        return null;
}
function getNextSiblingByElement(node){
        return getNextSibling(node, \"ELEMENT_NODE\");
}

// ||||||||||||||||||||||||||||||||||||||||||||||||||
// Menu Functions & Properties

var activeMenu = null;

function showMenu(){
        if(activeMenu){
                activeMenu.className = \"\";
                getNextSiblingByElement(activeMenu).style.display = \"none\";
        }
        if(this == activeMenu){
                activeMenu = null;
        }else{
                this.className = \"active\";
                getNextSiblingByElement(this).style.display = \"block\";
                activeMenu = this;
        }
        return false;
}
function initMenu(){
        var menus, menu, text, a, i;
        menus = getChildrenByElement(document.getElementById(\"menu\"));
        for(i = 0; i < menus.length; i++){
                menu = menus[i];
                text = getFirstChildByText(menu);
                a = document.createElement(\"a\");
                menu.replaceChild(a, text);
                a.appendChild(text);
                a.href = \"#\";
                a.onclick = showMenu;
                a.onfocus = function(){this.blur()};
        }
}

// ||||||||||||||||||||||||||||||||||||||||||||||||||

if(document.createElement) window.onload = initMenu;

</script>
```

Frågan är snarlik den förra. I denna menyn byggs raderna upp av ul, li och ol. Borde inte vara några problem men jag  jag vill inte att menyn "kollapsar", drar ihop sig, igen då man trycker på någon av länkarna. Någon som vet hur man löser detta?

Tack!

Permalänk: https://www.webforum.nu/p/1592306

## #4 — Peter S, 2005-04-15T08:08Z

Om något menyalternativ är expanderat, så skall inte detta kollapsa om något annat alternativ expanderas? Då

```
function showMenu(){
if(this == activeMenu){
this.className = "";
getNextSiblingByElement(this).style.display = "none";
activeMenu = null;
}else{
if(activeMenu){
activeMenu.className = "";
}
this.className = "active";
getNextSiblingByElement(this).style.display = "block";
activeMenu = this;
}
return false;
}
```

Permalänk: https://www.webforum.nu/p/1592367

## #5 — dr_damir, 2005-04-15T09:45Z

Tack för svaret men vad jag tänkte mig var:
1\. De börjar kollapsade på sidan laddas.
2\. Om ett alternativ expanderas så ska det vara det enda expanderad, dvs. alla andra ska kollapsa.
3\. Om man klicka på en länk i menyn skall den inte automatiskt kollapsa då denna länk öppnas.

hoppas det går...
tack

Permalänk: https://www.webforum.nu/p/1592417

## #6 — dr_damir, 2005-04-19T17:59Z

Någon som vet hur man skulle kunna fixa det?
Jag fixade det genom att skicka en variabel genom php som talar om för menyn att den första menyraden alltid ska vara öppen. 
Men, jag vet inte hur jag ska göra så att den meny som är öppen får bold-stil på sin överskrift.

All hjälp är tacksam! Tja!

Permalänk: https://www.webforum.nu/p/1597101

---

Tråden på webben: https://www.webforum.nu/amne/javascript/126429-menyprobs
