Jeg vil gerne have at en mouseover på den første også aktiveres i den anden, men hvordan gør jeg det? this refererer til sig selv, men jeg kan ikke bruge 2.idName:
I min css har jeg lavet mouseover effekterne og de virker, men når musen er over menu01 vil jeg gerne have aktiveret mouseover på menu02 også. Jeg forklarede det måske ikke helt præcist i første omgang.
Ikke helt, da de to mouseover er forskellige og ligeledes med de to mouseout. Man kan selvfølgelig godt lave en overordnet mouseout, der bare satte hele skidtet til udgangspunktet. Hvordan kan det klares med css'en og javascript som du mente godt kunne lade sig gøre?
Det kan ikke være fordi det bliver overrulet af CSS'en, da jeg har prøvet at fjerne min hover dér - det resulterede blot i at der slet ingen mouseover effekt var.
Det fungerer ikke helt. Hvis jeg aktiverer hover på menu01, så virker hover ikke på menu02, men hvis jeg aktiverer hover på menu02 inden menu01, så fungerer den. Så snart menu01 har været aktiveret er der dog ikke noget at komme efter.
Jeg har ændret lidt i skidtet:
function mouseover(obj){ obj.style.backgroundPosition='0 29px' } function mouseout(obj){ obj.style.backgroundPosition='0 0' } function mouseover(obj1,obj2){ obj1.style.backgroundPosition=obj2.style.backgroundPosition='0 29px' } function mouseout(obj1,obj2){ obj1.style.backgroundPosition=obj2.style.backgroundPosition='0 0' }
Hov, det er jeg faktisk ikke. Gik lidt i stå, da jeg synes jeg har prøvet virkelig mange ting! I Java kan man godt have to mouseover()-funktioner, sålænge de tager et forskelligt antal parametre, så derfor troede jeg egentlig at det samme galt i Javascript, men det har jeg ingen idé om?
Problemet som status er nu, lyder:
Jeg har en række td's med hver sit id, fra menu01 - menu08. Enkeltvis fungerer de fint med deres mouseover og mouseout, men i et tilfælde skal det fungere lidt anderledes. Ved mouseover på menu03, skal både menu03 og menu04 aktiveres, og ved mouseout skal de deaktiveres - det virker fint. Ved mouseover på menu04 er det kun den, der skal aktiveres, men problemet her er, at den ikke deaktiveres ved mouseout. Den eneste måde at fjerne mouseover-effekten, er ved at køre musen tilbage på menu03, og trække den væk derfra igen.
Hvilket element ligger: onmouseover="mouseover(this,document.getElementById('menu04'));" onmouseout="mouseout(this,document.getElementById('menu04'));" på? Kan jeg evt. se den kodedel, som indeholder disse 2 eventhandlers?
Ok, lidt mere test lader til at afsløre, der intet er i vejen med funktionen. Grunden til at den bliver hængende er at der foldes en dropdown menu ud ved mouseover. Jeg skal på en eller anden vis, have tilknyttet min mouseout til denne dropdown menu. Jeg kan dog ikke helt gennemskue funktionsnavnene, måske du kan?
var disappeardelay=200 //menu disappear speed onMouseout (in miliseconds) var enableanchorlink=0 //Enable or disable the anchor link when clicked on? (1=e, 0=d) var hidemenu_onclick=1 //hide menu when user clicks within menu? (1=yes, 0=no)
var ie5=document.all var ns6=document.getElementById&&!document.all
function getposOffset(what, offsettype){ var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop; var parentEl=what.offsetParent; while (parentEl!=null){ totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop; parentEl=parentEl.offsetParent; } return totaloffset; }
function showhide(obj, e, visible, hidden){ if (ie5||ns6) dropmenuobj.style.left=dropmenuobj.style.top=-500 if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover") obj.visibility=visible else if (e.type=="click") obj.visibility=hidden }
function iecompattest(){ return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body }
function clearbrowseredge(obj, whichedge){ var edgeoffset=0 if (whichedge=="rightedge"){ var windowedge=ie5 && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15 dropmenuobj.contentmeasure=dropmenuobj.offsetWidth if (windowedge-dropmenuobj.x < dropmenuobj.contentmeasure) edgeoffset=dropmenuobj.contentmeasure-obj.offsetWidth } else{ var topedge=ie5 && !window.opera? iecompattest().scrollTop : window.pageYOffset var windowedge=ie5 && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18 dropmenuobj.contentmeasure=dropmenuobj.offsetHeight if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure){ //move up? edgeoffset=dropmenuobj.contentmeasure+obj.offsetHeight if ((dropmenuobj.y-topedge)<dropmenuobj.contentmeasure) //up no good either? edgeoffset=dropmenuobj.y+obj.offsetHeight-topedge } } return edgeoffset }
function dropdownmenu(obj, e, dropmenuID){ if (window.event) event.cancelBubble=true else if (e.stopPropagation) e.stopPropagation() if (typeof dropmenuobj!="undefined") //hide previous menu dropmenuobj.style.visibility="hidden" clearhidemenu() if (ie5||ns6){ obj.onmouseout=delayhidemenu dropmenuobj=document.getElementById(dropmenuID) if (hidemenu_onclick) dropmenuobj.onclick=function(){dropmenuobj.style.visibility='hidden'} dropmenuobj.onmouseover=clearhidemenu dropmenuobj.onmouseout=ie5? function(){ dynamichide(event)} : function(event){ dynamichide(event)} showhide(dropmenuobj.style, e, "visible", "hidden") dropmenuobj.x=getposOffset(obj, "left") dropmenuobj.y=getposOffset(obj, "top") dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+"px" dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+obj.offsetHeight+"px" } return clickreturnvalue() }
function clickreturnvalue(){ if ((ie5||ns6) && !enableanchorlink) return false else return true }
function contains_ns6(a, b) { while (b.parentNode) if ((b = b.parentNode) == a) return true; return false; }
function dynamichide(e){ if (ie5&&!dropmenuobj.contains(e.toElement)) delayhidemenu() else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget)) delayhidemenu() }
function delayhidemenu(){ delayhide=setTimeout("dropmenuobj.style.visibility='hidden'",disappeardelay) }
function clearhidemenu(){ if (typeof delayhide!="undefined") clearTimeout(delayhide) }
var disappeardelay=200; //menu disappear speed onMouseout (in miliseconds) var enableanchorlink=0; //Enable or disable the anchor link when clicked on? (1=e, 0=d) var hidemenu_onclick=1; //hide menu when user clicks within menu? (1=yes, 0=no)
var ie5=document.all; var ns6=document.getElementById&&!document.all;
function getposOffset(what, offsettype){ var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop; var parentEl=what.offsetParent; while (parentEl!=null){ totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop; parentEl=parentEl.offsetParent; } return totaloffset; }
function showhide(obj, e, visible, hidden){ if (ie5||ns6) dropmenuobj.style.left=dropmenuobj.style.top=-500 if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover"){ obj.visibility=visible; } else if (e.type=="click"){ obj.visibility=hidden; if(oDropdownmenuopener)mouseout(oDropdownmenuopener,oDropdownmenuopener); } }
function iecompattest(){ return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body }
function clearbrowseredge(obj, whichedge){ var edgeoffset=0 if (whichedge=="rightedge"){ var windowedge=ie5 && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15 dropmenuobj.contentmeasure=dropmenuobj.offsetWidth if (windowedge-dropmenuobj.x < dropmenuobj.contentmeasure) edgeoffset=dropmenuobj.contentmeasure-obj.offsetWidth } else{ var topedge=ie5 && !window.opera? iecompattest().scrollTop : window.pageYOffset var windowedge=ie5 && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18 dropmenuobj.contentmeasure=dropmenuobj.offsetHeight if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure){ //move up? edgeoffset=dropmenuobj.contentmeasure+obj.offsetHeight if ((dropmenuobj.y-topedge)<dropmenuobj.contentmeasure) //up no good either? edgeoffset=dropmenuobj.y+obj.offsetHeight-topedge } } return edgeoffset }
var oDropdownmenuopener=null; function dropdownmenu(obj, e, dropmenuID){ oDropdownmenuopener=obj; if (window.event) event.cancelBubble=true else if (e.stopPropagation) e.stopPropagation() if (typeof dropmenuobj!="undefined") //hide previous menu dropmenuobj.style.visibility="hidden" clearhidemenu() if (ie5||ns6){ obj.onmouseout=delayhidemenu dropmenuobj=document.getElementById(dropmenuID) if (hidemenu_onclick) dropmenuobj.onclick=function(){dropmenuobj.style.visibility='hidden'} dropmenuobj.onmouseover=clearhidemenu dropmenuobj.onmouseout=ie5? function(){ dynamichide(event)} : function(event){ dynamichide(event)} showhide(dropmenuobj.style, e, "visible", "hidden") dropmenuobj.x=getposOffset(obj, "left") dropmenuobj.y=getposOffset(obj, "top") dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+"px" dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+obj.offsetHeight+"px" } return clickreturnvalue() }
function clickreturnvalue(){ if ((ie5||ns6) && !enableanchorlink) return false else return true }
function contains_ns6(a, b) { while (b.parentNode) if ((b = b.parentNode) == a) return true; return false; }
function dynamichide(e){ if (ie5&&!dropmenuobj.contains(e.toElement)) delayhidemenu() else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget)) delayhidemenu() }
function delayhidemenu(){ delayhide=setTimeout("dropmenuobj.style.visibility='hidden'",disappeardelay) }
function clearhidemenu(){ if (typeof delayhide!="undefined") clearTimeout(delayhide) }
Nej, oDropdownmenuopener instantieres jo globalt uden for funktionen og derfor også før, den bliver taget i brug i funktionen showhide, der jo først kaldes ved onmouseout.
function delayhidemenu(){ delayhide=setTimeout("dropmenuobj.style.visibility='hidden'",disappeardelay) }
som skal rettes til:
function delayhidemenu(){ delayhide=setTimeout("dropmenuobj.style.visibility='hidden';if(oDropdownmenuopener)mouseout(oDropdownmenuopener,oDropdownmenuopener);",disappeardelay) }
Jamen nu ser det jo pludselig rigtig rigtigt ud! Dog er der en enkelt lille hage. Når jeg bevæger mig fra drop down til den menu, som hænger sammen med den, så aktiveres dropdown ikke som mouseover - det skulle den helst gerne.
Når du holder musen over "Turneringer", så aktivers både den og pilen ved siden af. Men når du har musen over pilen og går tilbage til "Turneringer" så aktiveres pilen ikke.
Faktisk bør du nok på turneringer sætte oDropdownmenuopener=document.getElementById('menu6'); og på klubber sætte oDropdownmenuopener=document.getElementById('menu4');
oDropdownmenuopener=null ser umiddelbart ud til at klare tricket, men når jeg bevæger mig fra pilen ved turneringer til klubber, så hænger pilen fast som mouseover. Dit sidste forslag hjalp ikke.
Hmm. Ja. Det var dét, som mit sidste forslag skulle afhjælpe.
Ret:
var oDropdownmenuopener=null;
til:
var oDropdownmenuopener=oDropdownmenuopener2=null;
og sæt så på turneringer oDropdownmenuopener2=document.getElementById('menu6'); og på klubber oDropdownmenuopener2=document.getElementById('menu4');
Og ret så til sidst:
function delayhidemenu(){ delayhide=setTimeout("dropmenuobj.style.visibility='hidden';if(oDropdownmenuopener)mouseout(oDropdownmenuopener,oDropdownmenuopener);",disappeardelay) }
til:
function delayhidemenu(){ delayhide=setTimeout("dropmenuobj.style.visibility='hidden'; if(oDropdownmenuopener&&oDropdownmenuopener!=oDropdownmenuopener2)mouseout(oDropdownmenuopener,oDropdownmenuopener);",disappeardelay) }
Du skal så nok også sætte følgende på dine andre menupunkters onmouseover: oDropdownmenuopener2=null;
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.