Avatar billede bennybit Nybegynder
02. oktober 2000 - 13:01 Der er 27 kommentarer og
1 løsning

Aktivering af applet via et JavaScript inkl. CSS

Jeg har lavet et javascript, der styrer en applet-drop-down-menu, men har lidt problemer med at gøre den synlig/usynlig via klik med musen:

I min .js-fil indkapsler jeg de genererende linier med <DIV CLASS=\'synlig_usynlig\'>...</DIV>. I .css-filen har jeg tilsvarende oprettet:

# synlig_usynlig {
visibility: hidden;
etc.
etc.
}

Appletten loader helt fint, hvis den får lov at starte sin \"tilværelse\" som synlig. Dernæst kan jeg gøre den usynlig/synlig/usynlig (som jeg lyster) ved at kalde en funktion, der sætter visibility til henholdsvis \"hidden\" og \"visible\".

Men (nu kommer det...) hvis jeg lader den være usynlig (dvs. \"visibility: hidden\") fra STARTEN af, kan jeg mærkeligt nok ikke efterfølgende ændre dens synlighed, som ovenfor nævnt?

Min egen mistanke går på, om appletten (evt. appletter generelt) kræver at være \"visible\" fra staren af. Håber det er mig, der gør noget galt, for ellers ryger min fikse idé med min dropdown-menu...

Er der en eller anden flink/dygtig sjæl, som gider kommentere dette?
Avatar billede moses Praktikant
02. oktober 2000 - 13:20 #1
Underligt.

Er jeg ikke flink, at jeg gider at kommentere dette *LOL*
Avatar billede bennybit Nybegynder
02. oktober 2000 - 13:23 #2
=>...\"nydeligt\" svar, har du noget seriøst at bidrage med???
Avatar billede geeeet Nybegynder
02. oktober 2000 - 13:33 #3
Prøv evt. at skrive noget i dit lag efter din applet, så du kan se om laget overhovedet bliver synligt...

En anden mulighed er at vise laget, og derefter skrive applettet ind i laget bagefter...
Prøv lige at skrive noget tekst under den først, så prøver vi det andet bagefter...

/Geeeet
Avatar billede moses Praktikant
02. oktober 2000 - 13:39 #4
Jeg er bare med på en lytter, men det er så kedeligt bare at skrive det hver gang !!
Og så kunne jeg jo lige så godt benytte mig af den lille sprog-finurlighed.
Undskyld, hvis det brød din koncentration !
Avatar billede bennybit Nybegynder
02. oktober 2000 - 13:45 #5
=> Hej geeeet:

Laget bliver synligt, jeg har som test skrevet noget både før og efter.

NB! Kan jeg ringe til dig? Du selv lige ringe på 2340 2899, hvorefter jeg kan ringe retur - ok?
Avatar billede geeeet Nybegynder
02. oktober 2000 - 13:53 #6
Det burde ikke være nødvendigt...

function writeItToLayer(what){
        if(document.layers){
            document.lagnavn.document.write(what);
            document.lagnavn.document.close();
        }
        else{
            document.all.lagnavn.innerHTML = what;
        }
    }

er en funktion som skifter indholdet i et lag som hedder \"lagnavn\"...
Ret navnet til det du selv benytter...

Du kalder funktionen således

writeItToLayer(\"dette kommer til at stå i laget nu\");

eller

var tekst = \"<applet mm. hvad der nu skal stå>\";
writeItToLayer(tekst);

så laver du bare en variebel indeholdende koden til din javaapplet-dims,
og kalder funktionen på en af de to ovenstående måder, lige efter at du har
sat \"visible\" på dit lag....

altså:

visibility = \"visible\",
writeItToLayer(\"<embed javadims>\");


Det skulle kunne fikse det...

/Geeeet
Avatar billede bennybit Nybegynder
02. oktober 2000 - 14:07 #7
=> Geeeet:

Det vil jeg prøve (i aften).

NB! Med lagnavn mener du \"z-index: 1\" som anført nedenfor, nederste linie, ikke sandt?


#synlig_usynlig{
position: absolute;
top: 5;
left: 5;
width: 150;
background-color: #E6E8FA;
visibility: hidden;
border-width: 1;
border-color: Black;
border-style: solid;
z-index: 1;
}
Avatar billede geeeet Nybegynder
02. oktober 2000 - 14:11 #8
Nej, der mener jeg navnet på dit lag...

<div id=\"lagnavn\"></div>

/Geeeet
Avatar billede bennybit Nybegynder
02. oktober 2000 - 19:28 #9
=> Geeeet:

Jeg kan ikke rigtigt styre tingene. Det er sikkert rigtigt, hvad du foreslår. Hvis jeg kunne maile dig min .js-fil, .css-fil samt mit html-dok, så ville jeg have nemmere ved at præcisere, hvor mit overblik står af - ok!

Ellers tak for din tid!
Avatar billede bennybit Nybegynder
03. oktober 2000 - 08:01 #10
=> Geeeet:

Det slog mig lige...(3 spørgsmål til prof.):

Spg. 1:
=======
Vil jeg med dit forslag ikke støde ind i problemet med, at objektet (#synlig_usynlig) først skal være defineret med en <DIV ID=\"synlig_usynlig>....applet-menu-halløj..</DIV>, før du kan referere til det og fx ændres dets visibility?

Spg. 2:
=======
Inden jeg \"kæmper\" videre, vil jeg høre dig, om nedenstående ikke giver det samme, som dit forslag:

.js-filen indeholder bl.a.:

// Her indskriver jeg én gang følgende

<DIV ID=\'synlig_usynlig\'>
document.synlig_usynlig.style.visibility = visible
.
.
.
<APPLET-halløj>
.
.
</APPLET>
</DIV>

Har endnu ikke prøvet det, men vil ikke mene det fungerer, da laget ikke er lukket (og velsagtens derfor heller ikke defineret) med </DIV>, inden jeg ændrer dets egenskaber...?

Spg. 3:
=======
Er det korrekt, at man kun bør benytte <DIV ID=\"lagnavn\">..</DIV> én gang, da ID er skabt til \"engangs-forestillinger\", hvorimod CLASS kan genbruges i det uendelige?

NB! Mine spørgsmål afslører sikkert, at jeg stadig er lidt i tvivl om en række grundlæggende begreber og deres anvendelse, men det ville fremme processen, såfremt du kunne hjælpe mig på rette spor - ok!
Avatar billede geeeet Nybegynder
03. oktober 2000 - 09:41 #11
OKay, jeg skal prøve at besvare dem bedst muligt, tag dig ikke af rækkefølgen, det gør jeg ikke :-)

1: Jo, du skal lave dit <div> således:

<div id=\"lagnavn\" style=\"position:absolute;visibility:hidden;\"></div>

så er det skjult indtil at vi vælger at vise det med vores script.


2: Her går det så lidt galt... Dit div-tag ligger, som jeg forstår det, i din javascriptkode, og det skal den ikke...
Den skal ligge i dit html-dokument, og det bedste er altid at lægge dem som det sidste på siden lige inden dit </body>-tag...

Altså:

<html>

<body>

xxxcodexxx

<div id=\"lagnavn\" style=\"position:absolute;visibility:hidden;\"></div>

</body>
</html>

Du kan som du selv siger, ikke ændre noget på et lag som du ikke hat afsluttet, da det endnu ikke burde være defineret...

3: Jo, id er et unikt navn som du skal give dine div-tags, da id skal være unikt ligesom dit personnummer... Derfor altid forskellige id-tags...
Class derimod er jo et stylesheet som du definerer, og menngen er som du selv siger, at genbruge det en masse steder, og du kan derfor godt sætte class=\"something\" på flere divs...

Du kunne sagtens maile mig koden, hvis ikke det var imod mit princip at lave hele kodestykker... Jeg vil meget hellere hjælpe på denne måde, sådan at jeg ved at du lærer noget af det...

/Geeeet

Avatar billede bennybit Nybegynder
03. oktober 2000 - 10:47 #12
=> Geeet:

Ok, jeg må \"svede\" videre.

NB!
Hvad betyder helt præcist denne linie:

document.all.lagnavn.innerHTML = what;
       
Avatar billede geeeet Nybegynder
03. oktober 2000 - 10:49 #13
innerHTML er ie´s tag til at ændre indholdet i et lag...
innerHTML er faktisk indholdet i laget...
Derfor kan man lave denne

indhold i lag = what;

hvor what er en variabel indholdende noget tekst/kode

/Geeeet
Avatar billede bennybit Nybegynder
03. oktober 2000 - 10:58 #14
=> Geeeet:

Ok, men når jeg nu for alvor er kommet på \"skolebænken\", så må jeg lige være helt 100% sikker på opbygningen af nedenstående:

if(document.layers){
document.lagnavn.document.write(what);
document.lagnavn.document.close();
}
Er kun sand, hvis vi taler Netscape - ikke sandt?

else{
document.all.lagnavn.innerHTML = what;
}
Antager du, at der benytes Ie - ikke sandt?
SKAL man skrive .all.? Duer document.lagnavn.innerHTML ikke?
Avatar billede geeeet Nybegynder
03. oktober 2000 - 11:01 #15
Jo, det øverste med write() er til netscape, og det andet er til ie...
Du kan se at der er en detection...
document.layers er netscape og document.all er ie...

Jeg ved faktisk ikke helt om du kan udelade all alene...
jeg tror måske at du kan nøjes med at skrive lagnavn.innerHTML = what;
men jeg vil ikke anbefale det, da det andet er mere korrekt kode...

/Geeeet
Avatar billede bennybit Nybegynder
03. oktober 2000 - 11:06 #16
=> Geeeet:

Perfekt - tak for hurtigt svar!

Du får \"fred\" nu, må først hjem og afprøve alle dine fine råd og vink - ok!

Du hører fra mig igen. Oom ikke andet i form af et accepteret svar og 60 points oven i hatten!!!
Avatar billede geeeet Nybegynder
03. oktober 2000 - 11:08 #17
:-)

God fornøjelse...

/Geeeet
Avatar billede bennybit Nybegynder
03. oktober 2000 - 12:08 #18
=> Geeeet:

...Lige én at gå hjem på:

Da min Vis-funktion efterfølgende vil blive fulgt op ad en Skjul-funktion og vise versa (afhænger jo af brugerens beslutsomhed...), har jeg et lille tillægsspørgsmål (meget brugt i \"Trafikradio\"...):

Skal laget ikke tømmes (fx i Skjul-funktionen) inden der kan skrives i det på ny (via Vis-funktionen) eller det er måske lige meget?

Håber du forstår!
Avatar billede geeeet Nybegynder
03. oktober 2000 - 12:17 #19
Nej du behøver ikke at tømme laget...
Indholdet bliver overskrevet med det nye...

/Geeeet
Avatar billede bennybit Nybegynder
03. oktober 2000 - 12:53 #20
=> Geeeet:

Fint, tak.

I\'ll be back........
Avatar billede bennybit Nybegynder
03. oktober 2000 - 20:41 #21
=> Geeeet:

...Yes, den er i vinkel!!!

Ski.. godt du, så kan livet fortsætte.....
Avatar billede bennybit Nybegynder
04. oktober 2000 - 07:48 #22
=> Geeeet: En lille forfining...

Kan jeg ikke gøre \"SkrivTilEtLag\"-funktionen generel på nogenlunde følgende måde:

function w2Lag(tekst,lag){
    if(document.layers){
        document.lag.document.write(tekst)
        document.lag.document.close()
    }
    else{
        document.all.lag.innerHTML = tekst
    }
}

... og så kalde med w2Lag(\"Noget tekst\",EtLag)?

Får på ovenstående en fejl: \"document.all.lag is not an object\"

Hvad gør jeg galt...?
Avatar billede geeeet Nybegynder
04. oktober 2000 - 09:51 #23
Så skal du lave det sådan at du kalder den med lagets navn:

function writeItToLayer(what,where){
    if(document.layers){
        document.where.document.write(what);
        document.where.document.close();
    }
    else{
        document.all.where.innerHTML = what;
}

og så writeItToLayer(\"tekst\",lagnavn);

Måske skal du have \' og lagets navn, er ikke helt sikker...

/Geeeet
Avatar billede bennybit Nybegynder
04. oktober 2000 - 13:01 #24
=> Geeeet:

Så vidt jeg kan se, mangler jeg vist bare at prøve med \'EtLag\' på min egen udgave - ellers er dit forslag da vist analogt med \"mit\" - ikke sandt.

NB! Er det \"god bordskik\" med semikolon sidst i alle linier (virker også uden)?
Avatar billede geeeet Nybegynder
04. oktober 2000 - 13:11 #25
Jo vores forslag er ens, grunden til at mine navne er anderledes er, at det rent faktisk er en function som jeg bruger ofte, og derfor kopierede jeg den bare fra noget kode... :-)

Og jo, det er god skik at have ; til sidst... Det er den korrekte syntax, og jeg har oplevet problemer med netscape hvis ikke de er der;

/Geeeet
Avatar billede bennybit Nybegynder
05. oktober 2000 - 09:48 #26
=> Geeeet:

Jeg kunne desværre ikke få det til at fungere med \"to-parameter-kaldet\"!

Har prøvet lidt forskelligt mht. \'\', \"\" og uden \"omklamring\" - ingen forskel, får stadig den samme fejlmeddelelse om, at \"document.all.where - is not an object\"!

Ikke for at være pivet, men jeg \"giver op nu\", da jeg nok fremover vil kunne klare mig med \"et-parameter-kald-udgaven\" - tidsforbruget taget i betragtning...

NB! Det ville bare have været lidt \"lækkert\" med den mere proffe. og generelle udgave - ikke sandt.

Skulle du evt. på et tidspunkt få \"skidtet\" til at virke, hører jeg gerne fra dig.
Avatar billede geeeet Nybegynder
05. oktober 2000 - 10:11 #27
Hej bennybit, jeg har den hvor den fungerer, men det tager bare lige lidt tid at lave et simpelt eksempel...

Jeg lover at gøre det så snart jeg får tid... [du må gerne huske mig på det, for jeg har det med at glemme :-)]

I\'ll be back !

/Geeeet
Avatar billede bennybit Nybegynder
05. oktober 2000 - 11:38 #28
=> Geeeet:

Fint nok, afventer med spænding din 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