Vraag & Antwoord

Webprogrammeren & scripting

Javascript: pop-up menu ie & netscape

8 antwoorden
  • Ik gebruik voor m'n site een menu die omgebouwd is vanaf deze: http://www.geocities.com/peetabix/scripts/hddmenu.html Ik gebruik specifiek dit menu omdat het niet zoals vele andere pup-up menu's 'over de pagina' heen wordt gezet, maar er echt in (de popup's worden er natuurlijk wel overheen gezet). Het probleem van die menu is dat het in Netscape niet werkt. Weet iemand of het makkelijk is om dit menu te verbeteren zodat hij het ook in Netscape doet? En zoja: hoe dan... ? :smile: bvd, Elja
  • [quote:dd2707040a] Op 06-02-2002 15:20, schreef Elja Trum:[b:dd2707040a] Weet iemand of het makkelijk is om dit menu te verbeteren zodat hij het ook in Netscape doet? En zoja: hoe dan... ? :smile:[/b:dd2707040a][/quote:dd2707040a] Als je de code begrijpt is het niet zo moeilijk, hooguit wat veel werk. Het script maakt namelijk gebruik van layers en die worden (helaas) per browser anders geïnterpreteerd maar vooral anders aangesproken. Nu is er een slimme Rus die een JavaScript-library heeft geschreven om layers aan te spreken. Het hoe en wat staat op zijn site, te vinden op http://www.kruglov.ru/klayers/ Bij mij werkt het scripje van Kruglov perfect. Succes ermee! :wink: - Basje.
  • Bedankt voor dat scriptje van Kruglov, Bas. Dat heeft me aardig op weg geholpen. Ik heb zowel dat scriptje geprobeerd als een eigen knutselwerkje aan de hand ervan, mara bij beide houd ik hetzelfde probleem. In IE doet ie het prima, maar in Netscape (6.0) zet ie de layer op de verkeerde plaats neer. Namelijk linksboven in de hoek. Hij moet net iets naar rechts staan en, afhankelijk van in welk menu je zit, wat meer naar beneden. De huidige code die ik gebruik is: [code:1:8e71812c91] function showmenu(elmnt) { if (document.getElementById && document.getElementById(elmnt) != null) node = document.getElementById(elmnt).style.visibility='visible'; else if (document.layers && document.layers[object] != null) document.layers[elmnt].visibility = 'visible'; else if (document.all) document.all[elmnt].style.zIndex = 100; document.all[elmnt].style.visibility = 'visible'; } function hidemenu(elmnt) { if (document.getElementById && document.getElementById(elmnt) != null) node = document.getElementById(elmnt).style.visibility='hidden'; else if (document.layers && document.layers[elmnt] != null) document.layers[elmnt].visibility = 'hidden'; else if (document.all) document.all[elmnt].style.visibility = 'hidden'; } [/code:1:8e71812c91] Nu heb ik geprobeerd om met document.layers[elmnt].left = 40 'm te verplaatsen, maar dit zorgt ervoor dat de hele code niet meer werkt in Netscape. Weet iemand hier de oplossing voor? bvd, Elja
  • Ik zie toch een aantal rare dingetjes in je script... node = document.getElementById(elmnt).style.visibility='visible'; waarom sla je de uitkomst hier op in de variabele 'node'? else if (document.all) document.all[elmnt].style.zIndex = 100; document.all[elmnt].style.visibility = 'visible'; Na de 'else if' zet je 2 statements, zonder brackets. De 2e statement wordt dus altijd uitgevoerd.. Ik weet niet of dat het effect in ns6 verklaart, maar goed... Oh en voor de goede orde.. NS[b:37a8d0458e]6[/b:37a8d0458e] maakt geen gebruik van de document.layer tak, maar die van document.getElementById
  • Tja, dat krijg je dus als je code zomaar ript van andere pagina's.. :smile: Dit zou al beter moeten zijn dan: [code:1:c27c23df08] function showmenu(elmnt) { if (document.getElementById && document.getElementById(elmnt) != null) document.getElementById(elmnt).style.visibility='visible'; else if (document.layers && document.layers[object] != null) document.layers[elmnt].visibility = 'visible'; else if (document.all) { document.all[elmnt].style.zIndex = 100; document.all[elmnt].style.visibility = 'visible'; } } function hidemenu(elmnt) { if (document.getElementById && document.getElementById(elmnt) != null) document.getElementById(elmnt).style.visibility='hidden'; else if (document.layers && document.layers[elmnt] != null) document.layers[elmnt].visibility = 'hidden'; else if (document.all) document.all[elmnt].style.visibility = 'hidden'; } [/code:1:c27c23df08] Helaas verandert dit niks aan de verkeerde positie in netscpae (links-boven). In de style tag is de table die zichtbaar wordt met dit script zo beschreven: [code:1:c27c23df08] table.menu { background:black; position:absolute; left=134; visibility:hidden; zIndex:0; } [/code:1:c27c23df08] Moet ik hierin nog iets veranderen om dit in netscape werkend te krijgen ? Elja
  • Misschien struikelt netscape over de niet bestaande zIndex:0; zIndex is de javascript notatie, in css heet dat z-index.. Of anders over left[b:31a273f480]=[/b:31a273f480]134; ipv left[b:31a273f480]:[/b:31a273f480]134[b:31a273f480]px[/b:31a273f480]. Netscape houdt van een [i:31a273f480]goede[/i:31a273f480] notatie, dus ook de eenheden horen erbij. Kijk je scripts goed na op dit soort foutjes!
  • Ik heb nu een variant geprobeerd voor de getElementById die Netscape 6 dus moet gebruiken: [code:1:b8e8ccc502] if (document.getElementById && document.getElementById(elmnt) != null) { document.getElementById(elmnt).style.visibility='visible'; document.getElementById(elmnt).style.top = '400px'; } [/code:1:b8e8ccc502] En het enige effect is dat het menu in IE6 400 pixels lager komt te staan. Bij Netscape 6 blijft ie nogsteeds linksboven staan :sad:
  • Thx Jurriaan! Ik kom steeds dichter in de buurt. :smile: Door die z-index te veranderen en de left:134px zet netscape 'm nu ook op de juiste plaatst horizontaal. Nu moet ik 'm alleen verticaal nog op de juiste plaatst krijgen. Ik ga ff kijken of ik de pagina ergens online kan zetten. Misschien wil iemand er dan even naar kijken.. Elja [edit]top: ipv left: geschreven..[/edit] <font size=-1>[ Dit Bericht is bewerkt door: Elja Trum op 2002-02-07 11:37 ]</font>

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.