Avatar billede dkjohn Nybegynder
07. november 2000 - 14:48 Der er 11 kommentarer og
1 løsning

Prøver lige igen

På http://boerneporten.dk/test/test.htm kan i se mit forsøg på at lave et simpelt script der skifter mellem 2 layers.
Problemet er at første gang der trykkes på \"tryk her 1\" kommer der en fejlmeddelse, tykker man nej til af søge fejlen og derefter trykker på \"tryk her 2\" og så ellers skiftevis mellem tryk her 1 og 2 virker scriptet fint.
Hvorfor kommer fejlen første gang og hvordan undgår jeg den ?
scriptet virker kun med MSIE.

//john
Avatar billede Jman Praktikant
07. november 2000 - 15:13 #1
function skift(nu){
har = hvad;
hvad=nu;
vis(hvad,har);
}
...
Sådan ser dit scriopt ud...
...
Prøv at fjerne mellemrummene i linien har = hvad;

---
(Er dog ikke siker)
Avatar billede dkjohn Nybegynder
07. november 2000 - 15:29 #2
Det hjalp ikke, desvære.
Avatar billede rfogh Nybegynder
07. november 2000 - 15:50 #3
Det virker da ikke fint efter 1. gang... Man kan se layer2 én gang, men så kan det ikke komme frem igen...
Avatar billede gertnissen Nybegynder
07. november 2000 - 16:02 #4
Klippet fra http://www.dansteinman.com/dynduo/en/showhide.html

Showing and Hiding

You might ask yourself: \"Why does Netscape display the visibility as \'show\'?\"

Well the answer is that Netscape\'s CSS properties are based around it\'s proprietory LAYER tag. However, even Netscape is now downplaying it\'s LAYER tag in favour of the W3C\'s recommended CSS-P. So the \"show\" and corresponding \"hide\" values of the visibility property are left-overs from Netscape\'s layers. I believe this is the only glaring defect in how Netscape represents CSS-P.

Until there is a unified standard you\'ll usually have to write separate code to hide a particular element.

For Netscape

    To show an element in Netscape you have to use:

      document.divName.visibility = \"show\"

    and to hide it\'s:

      document.divName.visibility = \"hide\"

For Internet Explorer

    To show an element in Internet Explorer you have to use:

      divName.style.visibility = \"visible\"

    and to hide it\'s:

      divName.style.visibility = \"hidden\"
Avatar billede dkjohn Nybegynder
07. november 2000 - 17:54 #5
rfogh>> Fra min skærm virker det fint efter 1. fejlmeddelse, første gang vise layer 2 oveni layver 2 men herefter vises kun et ad gangen.

getnissen>> hvis du går ind på den side jeg henviser til og vælger vis kilde, vil du se at det jo netop er sådan jeg har lavet det, så jeg forstår ikke rigtigt hvad du vil sige med det svar:

// john
Avatar billede gertnissen Nybegynder
08. november 2000 - 09:26 #6
hmm ikke helt, læg mærke til at man i Netscape ikke skal bruge STYLE og at det eksemplevis hedder SHOW istedet for VISIBLE.

Du bruger har.style.visibility=\"hidden\"; i IE frem for document.har.visibility=\"hide\"; som bruges i NN.

Avatar billede dkjohn Nybegynder
08. november 2000 - 10:51 #7
Ok, en lille misforståelse :-)
Jeg kunne jo også bare have skrevet at jeg i første omgang kun vil have det til at virke i IE og at jeg godt er klar over forskellen mellem NS og IE
Avatar billede gertnissen Nybegynder
08. november 2000 - 11:26 #8
Ok, jeg har så bare lagt for stor vægt på din sidste sætning i spøgsmålet \"scriptet virker kun med MSIE\".

Mht \"Hvorfor kommer fejlen første gang og hvordan undgår jeg den ?\" så skyldes det at du initialisere \'hvad\' og \'har\' med en tekst streng men at du kalder \'skift()\' med et object.

Når du så kommer ned i \'vis\' første gang er det med \'har\' som tekststreng og \'hvad\' som et object, dvs. i \'vis\' går det galt med har.style.visibility=\"hidden\"; og godt med hvad.style.visibility=\"visible\";.
Anden gang scriptet kaldes får \'har\' værdien af \'hvad\' og \'hvad\' værdien af parameteren = nyt object og dermed indeholder de begge objecter der kan bruges med style.

Prøv at indsætte alert(hvad + \' \' + har) i din \'vis\' function, så kan du tydeligt se problemet.
Avatar billede dkjohn Nybegynder
08. november 2000 - 13:39 #9
Fint, så lærte jeg også det :-)
Hvordan initialiser jeg så \'hvad\' og \'har\' som objecter istedet for strenge. ?

Jeg har andetsted set noget med eval(), men fatter ikke rigtig hvordan eller hvorfor.
Avatar billede gertnissen Nybegynder
08. november 2000 - 13:56 #10
Du laver blot din \'skift\' funktion om til dette, bemærk brugen af eval.

function skift(nu){
  har=eval(hvad);
  hvad=eval(nu);
  vis(hvad,har);
}
Avatar billede dkjohn Nybegynder
08. november 2000 - 14:05 #11
Mange tak.
Jeg fatter stadig ikke rigtig hvad eval gør eller hvorfor, men det kommer nok på et tidspunkt :-)

//john
Avatar billede zogu Nybegynder
08. november 2000 - 14:16 #12
Hej john

Grunden til at dit første script ikke virkede var fordi du giver har og hvad en string værdi til at starte med og ikke objecterne til dine dividers.

dit script virker faktisk også første gang hvis du gør sådan her.

<html>

<head>
<script>

function skift(nu){
har=hvad;
hvad=nu;
vis(hvad,har);
}


function vis(hvad,har) {
hvad.style.visibility=\"visible\";
har.style.visibility=\"hidden\";
}

</script>
<title>et eller andet</title>
</head>
<body>

<div id=start style=\"position:absolute;left:25%;top:25%;background-color:#ff00ff;width:50%;height:50%;z-index:1;\">
<table border=0 width=100% height=100%><tr><td align=center valign=center><img src=\"images/abanner.gif\" width=\"250\" height=\"60\"></td></tr></TABLE>
<a onClick=\"skift(start1)\" style=\"cursor:hand\">
tryk her 1
</a>
</div>
<div id=start1 style=\"position:absolute;left:30%;top:30%;background-color:#fff0f0;width:40%;height:40%;z-index:2;filter:Alpha(opacity=70);visibility:hidden;\">
<a onClick=\"skift(start)\" style=\"cursor:hand\"><img src=\"images/bp01.jpg\" width=\"250\" height=\"60\">tryk her 2</a>

<script>
var har=start1;
var hvad=start;
</script>

</div>
</body>

</html>

Med venlig hilsen
Zogu
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