webForumDet fria alternativet

menyprobs

5 svar · 297 visningar · startad av dr_damir

dr_damirMedlem sedan mars 2003132 inlägg
#1

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>
Peter SMedlem sedan dec. 20025 483 inlägg
#2

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)
dr_damirMedlem sedan mars 2003132 inlägg
#3

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!

Peter SMedlem sedan dec. 20025 483 inlägg
#4

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;
}
dr_damirMedlem sedan mars 2003132 inlägg
#5

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

dr_damirMedlem sedan mars 2003132 inlägg
#6

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!

137 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)