nordanMedlem sedan juni 2000949 inlägg Hallå!
Jag har lånat ett menyscript av Jojoxx det har funkat jättebra fram till att jag skulle göra någon ändring i meny. Nu stängs menyn så fort jag klickar på någon av länkarna jag har i menyn jag vill att menyn skall vara öppen om jag har klickat på någon av länkarna i den menyn. Är det någon som hittar felet för jag gör inte det.
Bifogar en enklare kod:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript">
var compressedMode = false;
var collapseMode = false;
function initMenu()
{
if(!document.getElementById)
{
return ;
}
var current=document.getElementById('menuroot').firstChild;
while(current)
{
if(current.className=="menu")
{
collapseAll(current);
}
current=current.nextSibling;
}
}
function findLink(url)
{
pos = url.indexOf('&a=');
if (pos < 0 ) pos = url.indexOf('?a=');
if (pos >= 0)
{
url = url.substring(pos+3);
pos2 = url.indexOf('&');
if (pos2 > 0 )
{
url = url.substring(0, pos2);
}
}
var allLinks=new Array();
allLinks=getAllChildsByTagName(document.getElementById('menuroot'),'a');
var match=false;
for(var i in allLinks)
{
//--- if(allLinks[i].href.split('#')[0].split('?')[0].toLowerCase().right(url.length)==url.toLowerCase())
if(allLinks[i].href.toLowerCase().right(url.length)==url.toLowerCase())
{
match=allLinks[i];
break;
}
}
if(match)
{
initMenu();
match=match.parentNode;
while(match.className=="menu")
{
match.style.display="block";
match=match.parentNode;
}
}
}
String.prototype.right = function(len){ return this.substring(this.length-len); }
function collapseAll(element)
{
if(!document.getElementById)
{
return
}
menues=getAllChildsByTagName(element,"div");
for(var i in menues)
{
menues[i].style.display="none";
if(getPreviousSiblingByClassName(menues[i],"menuChoice").innerHTML.match(/^(\+|\-)/))
{
getPreviousSiblingByClassName(menues[i],"menuChoice").innerHTML="+"+getPreviousSiblingByClassName(menues[i],"menuChoice").innerHTML.substring(1);
}
}
element.style.display="none";
}
function getAllChildsByTagName(element,tagname)
{
var parents=new Array();
var elements=new Array();
var current;
parents[0]=element;
for(var i in parents)
{
current=parents[i].firstChild;
while(current)
{
if(current.hasChildNodes)
{
parents[parents.length]=current;
}
if(current.tagName==tagname.toUpperCase())
{
elements[elements.length]=current;
}
current=current.nextSibling;
}
}
return elements;
}
function getPreviousSiblingByClassName(element,classname)
{
while(element.previousSibling)
{
if(element.previousSibling.className==classname)
{
return element.previousSibling;
}
element=element.previousSibling;
}
return false;
}
function sw(mnu,li)
{
if(!document.getElementById)
{
return false;
}
if(document.getElementById(mnu).style.display=='block')
{
if(collapseMode)
{
collapseAll(document.getElementById(mnu));
}
else
{
document.getElementById(mnu).style.display='none';
}
}
else
{
if(document.getElementById(mnu).parentNode.className=="menu" && compressedMode)
{
collapseAll(document.getElementById(mnu).parentNode);
document.getElementById(mnu).parentNode.style.display="block";
}
document.getElementById(mnu).style.display="block";
}
if(li.innerHTML.match(/^(\+|\-)/))
{
li.innerHTML=(document.getElementById(mnu).style.display == 'none')?"+"+li.innerHTML.substring(1):"-"+li.innerHTML.substring(1);
}
return false;
}
</script>
</head>
<body onLoad="initMenu();findLink(location.href);">
<p> </p>
<p> </p>
<div id="menuroot" class="menu">
<a href="#" onClick="return sw('menu_0',this);" class="menuChoice">+Heavy Music</a><br>
<div id="menu_0" class="menu">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr><td > ---<a href="nasta.php?prodid=3&a=menu_1" class="menuProdukt">Metallica</a></td></tr>
<tr><td > ---<a href="nasta.php?prodid=4&a=menu_2" class="menuProdukt">Iron Maiden</a></td></tr>
<tr><td > ---<a href="nasta.php?prodid=6&a=menu_3" class="menuProdukt">Ozzy</a></td></tr>
<tr><td > </td>
</tr>
<tr><td > </td>
</tr>
</table>
</div>
</div>
</body>
</html>
JojoxxMedlem sedan juni 20004 308 inlägg Lite moddad kod ser jag :)
Ändra funktionen findLink till:
function findLink(url){
var allLinks=new Array();
allLinks=getAllChildsByTagName(document.getElementById('menuroot'),'a');
var match=false;
for(var i in allLinks){
if(allLinks[i].href.toLowerCase().right(url.length)==url.toLowerCase()){
match=allLinks[i];
break;
}
}
if(match){
initMenu();
while(match=match.parentNode){
if(match.className=="menu"){
match.style.display="block";
var li=getAllChildsByTagName(match,"a");
if(li[0].innerHTML.match(/^(\+|\-)/)){
li[0].innerHTML="-"+li[0].innerHTML.substring(1);
}
}
}
}
}
(Red. Har uppdaterat orginalet med en bättre hantering för att hitta aktuell meny.)
nordanMedlem sedan juni 2000949 inlägg Tack för svaret Jojoxx, men jag får ett felmedelade när jag lägger in den nya funktionen.
Någon som vet vad det är för fel?
Bifogar bild
Peter SMedlem sedan dec. 20025 483 inlägg Kan du bifoga din nuvarande kod (liknande ditt första inlägg) blir det enklare att felsöka.
:)
nordanMedlem sedan juni 2000949 inlägg Här är koden
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript">
var compressedMode = false;
var collapseMode = false;
function initMenu()
{
if(!document.getElementById)
{
return ;
}
var current=document.getElementById('menuroot').firstChild;
while(current)
{
if(current.className=="menu")
{
collapseAll(current);
}
current=current.nextSibling;
}
}
function findLink(url){
var allLinks=new Array();
allLinks=getAllChildsByTagName(document.getElementById('menuroot'),'a');
var match=false;
for(var i in allLinks){
if(allLinks[i].href.toLowerCase().right(url.length)==url.toLowerCase()){
match=allLinks[i];
break;
}
}
if(match){
initMenu();
while(match=match.parentNode){
if(match.className=="menu"){
match.style.display="block";
var li=getAllChildsByTagName(match,"a");
if(li[0].innerHTML.match(/^(\+|\-)/)){
li[0].innerHTML="-"+li[0].innerHTML.substring(1);
}
}
}
}
}
String.prototype.right = function(len){ return this.substring(this.length-len); }
function collapseAll(element)
{
if(!document.getElementById)
{
return
}
menues=getAllChildsByTagName(element,"div");
for(var i in menues)
{
menues[i].style.display="none";
if(getPreviousSiblingByClassName(menues[i],"menuChoice").innerHTML.match(/^(\+|\-)/))
{
getPreviousSiblingByClassName(menues[i],"menuChoice").innerHTML="+"+getPreviousSiblingByClassName(menues[i],"menuChoice").innerHTML.substring(1);
}
}
element.style.display="none";
}
function getAllChildsByTagName(element,tagname)
{
var parents=new Array();
var elements=new Array();
var current;
parents[0]=element;
for(var i in parents)
{
current=parents[i].firstChild;
while(current)
{
if(current.hasChildNodes)
{
parents[parents.length]=current;
}
if(current.tagName==tagname.toUpperCase())
{
elements[elements.length]=current;
}
current=current.nextSibling;
}
}
return elements;
}
function getPreviousSiblingByClassName(element,classname)
{
while(element.previousSibling)
{
if(element.previousSibling.className==classname)
{
return element.previousSibling;
}
element=element.previousSibling;
}
return false;
}
function sw(mnu,li)
{
if(!document.getElementById)
{
return false;
}
if(document.getElementById(mnu).style.display=='block')
{
if(collapseMode)
{
collapseAll(document.getElementById(mnu));
}
else
{
document.getElementById(mnu).style.display='none';
}
}
else
{
if(document.getElementById(mnu).parentNode.className=="menu" && compressedMode)
{
collapseAll(document.getElementById(mnu).parentNode);
document.getElementById(mnu).parentNode.style.display="block";
}
document.getElementById(mnu).style.display="block";
}
if(li.innerHTML.match(/^(\+|\-)/))
{
li.innerHTML=(document.getElementById(mnu).style.display == 'none')?"+"+li.innerHTML.substring(1):"-"+li.innerHTML.substring(1);
}
return false;
}
</script>
</head>
<body onLoad="initMenu();findLink(location.href);">
<p> </p>
<p> </p>
<div id="menuroot" class="menu">
<a href="#" onClick="return sw('menu_0',this);" class="menuChoice">+Heavy Music</a><br>
<div id="menu_0" class="menu">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr><td > ---<a href="nasta.php?prodid=3&a=menu_1" class="menuProdukt">Metallica</a></td></tr>
<tr><td > ---<a href="nasta.php?prodid=4&a=menu_2" class="menuProdukt">Iron Maiden</a></td></tr>
<tr><td > ---<a href="nasta.php?prodid=6&a=menu_3" class="menuProdukt">Ozzy</a></td></tr>
<tr><td > </td>
</tr>
<tr><td > </td>
</tr>
</table>
</div>
</div>
</body>
</html>
:)
Peter SMedlem sedan dec. 20025 483 inlägg Hm, den koden fungerar för mig. Har du testat Johans uppdatering?
:)
nordanMedlem sedan juni 2000949 inlägg Japp
Jag har bytit ut function findLink() till den som Jojoxx har lagt in här :q
RED:
Nu funkar det
Tack för hjälpen :bire :birp
nordanMedlem sedan juni 2000949 inlägg Jag måste fråga en fråga till
om jag lägger till en till variabel i URL så funkar inte meny igen *pust*
Funkar
music.php?katid=3&a=menu_1
Funkar inte
music.php?page=2&katid=3&a=menu_1
Menyn åker ihop
:)
Peter SMedlem sedan dec. 20025 483 inlägg Fungerar för mig. Exempel.
:)
nordanMedlem sedan juni 2000949 inlägg Den funkar inte för mig iaf. Och min meny ligger inte i en html sida uta i en php sida med pageing. Det är inte föns den kommer på andra sidan som den inte fäller ut eller om man lägger in alert i javascriptet så är det så att den snurar två gånger på förstasidan. Asså känner av vilken meny som skall vara öppen och sen stänger den och öppnar igen. Går man in på page 2 som har samma javascript så snurrar den bara en gång.
Den avbryter asså efter att den har sagit ihop meny förstagången vilket jag inte vill att den skall göra.
Peter SMedlem sedan dec. 20025 483 inlägg Ny version av findLink():
function findLink(url){
var allLinks=new Array();
allLinks=getAllChildsByTagName(document.getElementById('menuroot'),'a');
var match=false;
for(var i in allLinks){
if(allLinks[i].href.toLowerCase().split(/page=\d+&/).join('').right(url.length)==url.toLowerCase().split(/page=\d+&/).join('')){
match=allLinks[i];
break;
}
}
if(match){
initMenu();
while(match=match.parentNode){
if(match.className=="menu"){
match.style.display="block";
var li=getAllChildsByTagName(match,"a");
if(li[0].innerHTML.match(/^(\+|\-)/)){
li[0].innerHTML="-"+li[0].innerHTML.substring(1);
}
}
}
}
}
:)
nordanMedlem sedan juni 2000949 inlägg Nu verkar det faktist funka igen :)
Så "felet" låg i koden:
if(allLinks[i].href.toLowerCase().split(/page=\d+&/).join('').right(url.length)==url.toLowerCase().split(/page=\d+&/).join('')){
match=allLinks[i];
break;
}
Det är väll inte ett fel men det funka ju inte med min paging.
Skall det funka utan att man måste lägga till den där ifen med split(/page) m.m.
Tack för hjälpen!
nordanMedlem sedan juni 2000949 inlägg Kom på en annan fråga gällade scriptet går det att få till så att det inte syns när menyrena håller på att ställas in? Nu så hoppar den till och öppnar allt innan den stänger och hittar rätt :)