Avatar billede clevzter Nybegynder
03. august 2002 - 03:28 Der er 23 kommentarer og
1 løsning

variabel i script

Jeg har der her script til at vise/skjule layers med et bestemt id (thaMenu).

<script language="JavaScript">
if (document.layers) {
  visible = 'show';
  hidden = 'hide';
} else if (document.all) {
  visible = 'visible';
  hidden = 'hidden';
} else if (document.getElementById) {
    visible = 'visible';
    hidden = 'hidden';
}
var ns = document.layers;
var ie = document.all;
var dom = document.getElementById;
function hideShow() {
    if (ns) {
            if (document.thaMenu.visibility == visible) {
                document.thaMenu.visibility=hide;
            } else {
                document.thaMenu.visibility=show;
            }
        } else if (ie) {
            if (document.thaMenu.style.visibility == visible) {
                document.thaMenu.style.visibility=hidden;
            } else {
                document.thaMenu.style.visibility=visible;
            }
        } else if (dom) {
            if (document.getElementById("thaMenu").style.visibility == visible) {
                document.getElementById("thaMenu").style.visibility=hidden;
            } else {
                document.getElementById("thaMenu").style.visibility=visible;
            }
        }
}
</script>

Er det ik muligt at ændre lidt i det, så jeg kan angive hvad der skal vises/skjules i mit link og ikke i scriptet. Der skal vist bruges parametre i funktionen, men så meget ved jeg ik endnu...
Avatar billede clevzter Nybegynder
03. august 2002 - 03:37 #1
anywho! jeg ville lige oprette spørgsmålet inden jeg går i seng og så håber jeg på et svar at stå op til om nogle timer...

Godnat!
Avatar billede =maddog= Nybegynder
03. august 2002 - 09:33 #2
var vis=(document.layers)?'show':'visible';
var gem=(document.layers)?'hide':'hidden';

function getById(id) {
obj = (document.layers)?document.layer[id]:(document.all)?document.all[id]:(document.getElementById)?document.getElementById(id):return;
obj.css = (document.layers)?obj:obj.style;
return obj;
}

function hideShow(id) {
obj = getById(id);
if (obj.css.visibility == vis) obj.css.visibility=gem;
else obj.css.visibility=vis;
}

skulle virke.
Avatar billede clevzter Nybegynder
03. august 2002 - 14:31 #3
-> maddog
Har du testet det? Jeg får en syntax-fejl i linien:

  obj = (document.layers)?document.layer[id]:(document.all)?document.all[id]:(document.getElementById)?document.getElementById(id):return;
Avatar billede =maddog= Nybegynder
03. august 2002 - 14:37 #4
nej jeg har ikke testet det. skrev efter hukommelsen. tester lige. 1 sekund.
Avatar billede =maddog= Nybegynder
03. august 2002 - 14:39 #5
skift return ud med new Object() i den linje.
Avatar billede clevzter Nybegynder
03. august 2002 - 14:47 #6
nu vil den godt loade scriptet, men siger at obj ik er et objekt nå jeg kører functionen via et link
Avatar billede clevzter Nybegynder
03. august 2002 - 14:48 #7
<a href="java script:void(null);" onClick="hideShow();">TestIt</a>
Avatar billede clevzter Nybegynder
03. august 2002 - 15:06 #8
-> maddog
hvad kan der være galt?
Avatar billede Slettet bruger
03. august 2002 - 15:31 #9
Du skal huske at kalde med id'en i linket:

<a href="#" onClick="hideShow('mitLag');">Test it</a>
Avatar billede Slettet bruger
03. august 2002 - 15:32 #10
Ups, mangler return false, så vi undgår, at siden hopper til toppen:

<a href="#" onClick="hideShow('mitLag'); return false;">Test it</a>
Avatar billede clevzter Nybegynder
03. august 2002 - 15:39 #11
fejl: obj.css.visibility er ikke et objekt
Avatar billede =maddog= Nybegynder
03. august 2002 - 15:54 #12
Ked af det men det virker fint.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><script type="text/javascript">
var vis=(document.layers)?'show':'visible';
var gem=(document.layers)?'hide':'hidden';
function getById(id) {
obj = (document.layers)?document.layer[id]:(document.all)?document.all[id]:(document.getElementById)?document.getElementById(id):new Object();
obj.css = (document.layers)?obj:obj.style;
return obj;
}
function hideShow(id) {
obj = getById(id);
if (obj.css.visibility == vis || obj.css.visibility == "") obj.css.visibility=gem;
else obj.css.visibility=vis;
}
</script></head><body>
<div id="test">Test</div>
<a href="#" onclick="hideShow('test');return false;">test</a>
</body></html>
Avatar billede clevzter Nybegynder
03. august 2002 - 15:59 #13
aha! det måtte ik være et billede...
Avatar billede Slettet bruger
03. august 2002 - 15:59 #14
Det virker også fint hos mig (IE5 & NS6)!
Avatar billede clevzter Nybegynder
03. august 2002 - 16:03 #15
det virker oz her nu
jeg måtte vist bare ik bruge et billede. det er oz ligemeget, for det var bare en test. skal bruge en tabel rigtigt...
Avatar billede Slettet bruger
03. august 2002 - 16:05 #16
Du kan jo bare sætte billedet ind i et lag:

<div id="mitLag">
<img src="bla.gif">
</div>
Avatar billede Slettet bruger
03. august 2002 - 16:06 #17
Forresten skal scriptet lige rettes til, hvis det også skal virke i NS4. Man må jo ikke have to ting med den samme id på sin side, og derfor virker:

<div id="mitLag"><layer id="mitLag">
Tekst
</layer></div>

... jo ikke!
Avatar billede clevzter Nybegynder
03. august 2002 - 16:19 #18
Nej, men NS4 kan da godt med det her ik?

<div id="thaMenu" style="visibility:hidden;z-index:2;">
    menupunkt 1<br>
    menupunkt 2<br>
    menupunkt 3<br>
    menupunkt 4<br>
    menupunkt 5<br>
</div>
Avatar billede Slettet bruger
04. august 2002 - 14:42 #19
Nej. NS4 kender ikke div, men kun layer, som til gengæld fungerer på præcis samme måde (og endda i nogle henseender er lidt smartere).
Derfor kan man evt. ændre denne linje i scriptet:

obj = (document.layers)?document.layer[id]:(document.all)?document.all[id]:(document.getElementById)?document.getElementById(id):new Object();

... til:

obj = (document.layers)?document.layer[id + "ns"]:(document.all)?document.all[id]:(document.getElementById)?document.getElementById(id):new Object();

Hver gang, du så skal lave et lag, skal du lave en div først og derefter et layer med den samme id som div'en bare tilføjet "ns". Fx:

<div id="mitLag"><layer id="mitLagns">
Tekst
</layer></div>
Avatar billede =maddog= Nybegynder
04. august 2002 - 14:49 #20
evt.
var layer = (document.layers)?"layer":"div";
imellem dine script tags i head.
og
<script>
document.write("<"+layer+" id=\"mitLag\">Tekst</"+layer+">");
</script>
nede i dokumentet. Jow jow.
i øvrigt oversætter NS4
<div style="position:absolute;"> til <layer> og
<div style="position:relative;"> til <ilayer>
men desværre uden at genkende eventhandlers.
Avatar billede clevzter Nybegynder
04. august 2002 - 20:30 #21
phoenixvs ide lyder meget god
det vil jeg prøve...
tak for hjælpen gutter
Avatar billede =maddog= Nybegynder
04. august 2002 - 20:42 #22
we aim to please :D
Avatar billede clevzter Nybegynder
04. august 2002 - 23:34 #23
idéen med <div><layer> ser ikke ud til at virke i NS6
Avatar billede Slettet bruger
05. august 2002 - 12:04 #24
Af én eller anden grund ser NS6 ud til at genkende <layer>-tagget og reagere på dets style-property... Meget mystisk!
Men så må du jo bruge maddogs løsning! :)
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