Avatar billede diggerx Nybegynder
12. oktober 2004 - 11:38 Der er 18 kommentarer og
1 løsning

Menu går bagom select form og flash elementer

Jeg har en js dropdown menu. den virker fint, men der er bare det problem at hvis der er en select form på siden vises menuen bag ved select formen. Den går også bagom indlejrede flash elementer på siden.

Hvad gør man ved det???
Avatar billede fennec Nybegynder
12. oktober 2004 - 11:50 #1
Den mest almindelige løsning er et skjule <select> elementerne når man bruger menuen.

det gøres ved at kalde:
document.DinForm.DinSelect.style.visibility ='hidden';
document.DinForm.DinSelect.style.visibility ='visible';
Avatar billede diggerx Nybegynder
12. oktober 2004 - 11:59 #2
ok hvor sætter jeg det ind henne. jeg er ikke nogen haj til js

Jeg bruger en freeware menu der hedder coolmenu og den er kæmpestor. Der vilsikkert også være et problem i at der er select forme på mange forskellige sider.

Skal jeg smide hele koden ind?
Avatar billede fennec Nybegynder
12. oktober 2004 - 12:05 #3
coolmenu har to attributter på Item objectet, der bliver aktiveret onmouseover og onmouseout. På dem kalder du funktionerne:

myCoolMenu.makeMenu(name, parent_name, text, link, target, width, height, regImage, overImage, regClass, overClass , align, rows,&nbsp;nolink, onclick, onmouseover, onmouseout)

Der kan så laves en funktion som finder alle <select> elementerne og viser/skjuler dem. Sådan en bliver du nok nød til at have da det skal virke på alle sider.
Avatar billede fennec Nybegynder
12. oktober 2004 - 12:12 #4
Disse funktioner finder alle <select> elementerne og viser/skjuler dem:

function hideThis()
{
  try
  {
    var arr = document.body.all.tags("select");
    for(f=0;f<arr.length;f++)
    {
      arr(f).style.visibility = "hidden";
    }
  }
  catch(e){}
}

function showThis()
{
  try
  {
    var arr = document.body.all.tags("select");
    for(f=0;f<arr.length;f++)
    {
      arr(f).style.visibility = "visible";
    }
  }catch(e){}
}

Funktionerne skal bare placeres på siden og kaldes fra menuen.
Avatar billede diggerx Nybegynder
12. oktober 2004 - 12:28 #5
Jeg kan ikke regne ud hvor det er denne skal ind

myCoolMenu.makeMenu(name, parent_name, text, link, target, width, height, regImage, overImage, regClass, overClass , align, rows,&nbsp;nolink, onclick, onmouseover, onmouseout)

der er en function der begynder med

"function makeMenu(parent,obj,nest,type,num,subnum,subsubnum){
    nest=(!nest) ? '':'document.'+nest+'.'
      this.css=bw.dom? document.getElementById(obj).style:bw.ie4?document.all[obj].style:bw.ns4?eval(nest+"document.layers." +obj):0;                   
    this.evnt=bw.dom? document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?eval(nest+"document.layers." +obj):0;       
    this.height=bw.ns4?this.css.document.height:this.evnt.offsetHeight
osv osv"

er det der??
Avatar billede fennec Nybegynder
12. oktober 2004 - 12:38 #6
ikke der....

Du har en lang række kald hvor du opbygger menuen. Her kan du se hvordan jeg har gjort det. Min er lidt speciel fordi jeg har andre funktioner og frames jeg kalder.

oCMenu.makeMenu('top0','','Oversigt','oversigt.asp','MainMiddel','70','','','','','','','','','showBuildSelect();')
oCMenu.makeMenu('top1','','Indberetning','indberetninger.asp','MainMiddel','101','','','','','','','','','this.hidesub();showBuildSelect();','top.MainSelect.hideThis()','top.MainSelect.showThis()')
  oCMenu.makeMenu('sub12','top1','Indberet måler værdier','indberetninger.asp','MainMiddel','150','','','','',0,'','','','this.hidesub();showBuildSelect();')
  oCMenu.makeMenu('sub15','top1','Indberet affald','indberetninger.asp?mode=trash','MainMiddel','150','','','','',0,'','','','this.hidesub();showBuildSelect();')
  oCMenu.makeMenu('sub11','top1','Indberet grønne indkøb','indberetninger.asp?mode=green','MainMiddel','150','','','','',0,'','','','this.hidesub();showBuildSelect();')
  oCMenu.makeMenu('sub14','top1','Indberet transport','indberetninger.asp?mode=transport','MainMiddel','150','','','','',0,'','','','this.hidesub();showBuildSelect();')
  oCMenu.makeMenu('sub10','top1','Udskift måler','indberetninger.asp?mode=ReplaceMeterMain','MainMiddel','150','','','','',0,'','','','this.hidesub();showBuildSelect();')
oCMenu.makeMenu('top2','','Status','status.asp','MainMiddel','70','','','','','','','','','this.hidesub();showBuildSelect();','top.MainSelect.hideThis()','top.MainSelect.showThis()')
Avatar billede fennec Nybegynder
12. oktober 2004 - 12:43 #7
.... en lille bemærkning til menuen.

Det er kun nødvendigt at smide hideThis() og showThis() kaldet på de menu punkter der har under menuer. Derfor bliver de kun kaldt på 'top1' og 'top2' menupunkterne (Dette er kun et lille udsnit af min menu, hvorfor du ikke kan se underpunkterne til top2)
Avatar billede diggerx Nybegynder
12. oktober 2004 - 12:48 #8
Jeg tror lige jeg sender et lille udsnit af min menu :-)

oMenu.makeMain(0,'<img src="img/pil.gif" width=11 height=11  align="absmiddle" border=0>&nbsp;<span class="topText">Forside</span>','Default.asp')

oMenu.makeMain(1,'<img src="img/pil.gif" width=11 height=11 align="absmiddle" border=0>&nbsp;<span class="topText">Kunder</span>','Default.asp?page=Kunde_soeg.asp')
oMenu.makeSub(1,0,'&nbsp;&nbsp;Kunder&nbsp;','Default.asp?page=Kunde_soeg.asp',2)
oMenu.makeSub(1,1,'&nbsp;&nbsp;Ny kunde&nbsp;','Default.asp?page=Kunde_opret_ret.asp&tp=ny',2)

oMenu.makeMain(2,'<img src="img/pil.gif" width=11 height=11 align="absmiddle" border=0>&nbsp;<span class="topText">Opgaver</span>','Default.asp?page=Opgave_igang.asp')
oMenu.makeSub(2,0,'&nbsp;&nbsp;Opgaver&nbsp;','Default.asp?page=Opgave_igang.asp',3)
oMenu.makeSub(2,1,'&nbsp;&nbsp;Åbne projekter','Default.asp?page=Projekt_oversigt.asp',3)
oMenu.makeSub(2,2,'&nbsp;&nbsp;Nyt projekt','Default.asp?page=Projekt_opret_ret.asp&tp=ny',3)
   
    <% sql2 = "select navn, projektid from projekt where virkid = " & virkid & " and afsluttet = 'n'"
    set rs=server.CreateObject("adodb.recordset")
    rs.Open sql2, conn, 3
    antal_poster = rs.RecordCount
    ii = 0
    do while not rs.eof
        Response.Write("oMenu.makeSubSub(2,1,"& ii &",'&nbsp;&nbsp;" & rs("navn") &"&nbsp;','Default.asp?page=projekt_info.asp&projektid="& rs("projektid")&"'," & antal_poster & ")") &vbcrlf
        rs.movenext
        ii = ii +1
    loop
Avatar billede fennec Nybegynder
12. oktober 2004 - 12:56 #9
Bruger du Coolmenu fra www.dhtmlcentral.com ??

Mig bekendt er der ikke noget der hedder oMenu.makeMain og oMenu.makeSub i den.
Avatar billede diggerx Nybegynder
12. oktober 2004 - 13:40 #10
Jeg aner ikke hvor jeg har fået den fra. Den js fil jeg bruger hedder coolmenus.js

jeg har downloadet fra dhtmlcentral.com. der hedder den coolmenus4.js, så det er sikkert en ældgammel version jeg har fået fat i..

i den nye version er der allerede taget højde for selectbox problemet + nogle problemer i opera og netscape som jeg slet ikke er kommet til endnu.

Så problemet er løst.
Tak for hjælpen. Læg et svar så du kan få point
Avatar billede fennec Nybegynder
12. oktober 2004 - 13:51 #11
Jeg havde slet ikke set, at det var lavet som et add-in til version 4. Men man skal jo også lære noget nyt hver dag :o)

.o) <-- One Eyed Jack
Avatar billede diggerx Nybegynder
12. oktober 2004 - 13:55 #12
Jep der er altid noget nyt :-)
Avatar billede roenving Novice
12. oktober 2004 - 14:30 #13
>>fennec

-- hvadfor bruger du .all.tags(), som kun virker i M$IE, når man bare kan bruge .getElementsByTagName(), som virker i en hvilkensomhelst bruser, da den er en del af DOM-standarden ?-)
Avatar billede fennec Nybegynder
12. oktober 2004 - 14:39 #14
Lige netop denne funktione har jeg ikke lavet. Jeg bruger den bare, men du har fuldstændig ret.

Vi har rigtig meget gammel kode her i firmaet, som ikke er crossbrowser kompatibel. Der står faktisk i vores kravsspecifikationer til kunderne at løsningen er rettet mod IE 5.5 og frem (vi laver primært intranet, så det er ikke så slemt)
Avatar billede roenving Novice
12. oktober 2004 - 14:50 #15
Ville det ikke være smart, hvis I med nogle få simple trick kunne ændre det til:

IE5+, Netscape, Mozilla, FireFox, Safari m.fl.

-- men det kommer selvfølgelig an på om og/eller hvilke andre M$-funktionaliteter i baserer jeres kode på ...
Avatar billede fennec Nybegynder
12. oktober 2004 - 15:01 #16
Det bliver det meste af vores nye kode også (det smutter nogle steder, når man klip/klistre og ikke går koden igennem). Men der er heller ikke tid/resurser til at ændre den gammel kode så det virker "rigtigt". Kunderne har jo også fået at vide at det kun virker i IE, så der er heller ingen grund til at ændre det.
Avatar billede roenving Novice
12. oktober 2004 - 15:11 #17
Næh, ikke i de gamle ...
Avatar billede olebole Juniormester
12. oktober 2004 - 18:03 #18
<ole>

fennec >> Selvom 'document.all' fungerer i IE, er det en betydelig dårligere performende metode, end at bruge f.eks. 'document.getElementById'.
Der er således andre og ligeså vægtige argumenter for ikke at bruge IE-specifik kode - men i stedet bruge de standardiserede DOM-bindings  ;o)

/mvh
</bole>
Avatar billede fennec Nybegynder
13. oktober 2004 - 08:55 #19
olebole >>
Nu kan man jo ikke bruge getElementById metoden i dette tilfælde, da man ikke kender ID'erne på select elementerne. Funktionen skulle have været lavet med getElementsByTagName, som roenving også skrev, men som sagt er det ikke mig, der har lavet den.
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