Avatar billede mhedex Nybegynder
22. maj 2000 - 16:41 Der er 20 kommentarer og
1 løsning

<A href>'s venstreposition i Netscape?


Jeg har en Javascript funktion der ser således ud:


function vismenu(caller,submenu){

if (ie4){

  eval(submenu+".style.left=caller.offsetLeft+(0.05*document.body.clientWidth)");
  eval(submenu+".style.visibility= 'visible'");
  }

else if (ns4){
 
  eval("document."+submenu+".left=caller.offsetLeft+(0.05*window.innerwidth)");
  eval("document."+submenu+".visibility= 'show'");
  }

}


Den kaldes så således:


    <div class="menu" name="hovedmenu" id="SuperMenu" nowrap>
    <A name="Submenu_varemaerke" class="menulink" href="etellerandet.php" id=1 onmouseover="vismenu(this,'varemaerke')">Varemærke</A>
    <A name="submenu_varemaerke2" class="menulink" href="nogetandet.php" id=2 onmouseover="vismenu(this,'produkt')">produkt</A>
    </div>


Men jeg kan ikke finde ud af at hente Caller's venstreposition ud i Netscape.. Det virker fint i Internet Exploder.... HJÆLP!!


Avatar billede steffen Nybegynder
22. maj 2000 - 18:05 #1
Skal du ikke bruge:

arguments.caller

under Netscape?

Altså:

else if (ns4){
  eval("document."+submenu+".left=arguments.caller.offsetLeft+(0.05*window.innerwidth)");
  eval("document."+submenu+".visibility= 'show'");
  }
}

Det mener jeg lige at kunne huske .. (utestet)
Avatar billede mhedex Nybegynder
22. maj 2000 - 18:19 #2
Så siger den:
can't convert arguments.caller.offsetLeft an integer......

ØVØV!?
Avatar billede steffen Nybegynder
22. maj 2000 - 18:47 #3
hmmm den gamle 50px / 50 problematik? - Har desværre ikke tid til at gå dybere i det.
Avatar billede olebole Juniormester
22. maj 2000 - 18:56 #4
<ole>
Næhh...det er vist en masse andet ;-))
'this' i dit kald sætter f.eks. 'caller' lig selve URL'en i din href! Du har også en masse andet sjov, men prøv lige at se dette eksempel...her kan du få alert'ed navnet på dit anker, men positionen af ankeret er jeg ikke sikker på, du kan ekstrahere...?!? Eller har jeg misforstået dit spørgsmål?

<html>
<head>
<script language="javascript">
<!--
function vismenu(caller,submenu){
    alert(document.layers.SuperMenu.document.anchors[caller].name);
}
//-->
</script>
<style type="text/css">
#SuperMenu{position:absolute; left:50px;}
</style>
</head>
<body>
    <div id="SuperMenu" nowrap>
    <A name="Submenu_varemaerke" class="menulink" href="etellerandet.php" onmouseover="vismenu('Submenu_varemaerke','varemaerke')">Varemærke</A>
    <A name="submenu_varemaerke2" class="menulink2" href="nogetandet.php" onmouseover="vismenu('submenu_varemaerke2','produkt')">produkt</A>
    </div>
</body>
</html>

/Vh
</bole>
Avatar billede olebole Juniormester
22. maj 2000 - 18:58 #5
Tag dig ikke af, jeg har lavet forskellige class's på dine ankre...det var bare en del af en test ;-)
Avatar billede mhedex Nybegynder
22. maj 2000 - 19:32 #6
This henviser til det rigtige i IE, men jeg tror du har ret i at det er urlen i NS.

Det med at ekstrahere positionen har du fanget helt rigtigt.. jeg tjekker lige om det dur..


Avatar billede olebole Juniormester
22. maj 2000 - 19:36 #7
Jeg er bange for, du bliver nødt til at lægge hvert anker i et <div> eller <span> og så spørge til deres position. Jeg tror som sagt ikke 'geografien' for ankre er implementeret...jeg har ikke selv brugt det og har ikke lige kunnet finde noget doku på det, men leder lidt mere ;-)
Ender du med <div>/<span> løsningen, hjælper jeg dig gerne videre ;-);
/Vh
Avatar billede olebole Juniormester
22. maj 2000 - 20:15 #8
Her er et eksempel, der viser, hvad jeg mener:

<html>
<head>
<script language="javascript">
<!--
function vismenu(myPath,caller,submenu){
    alert(eval('document.layers.SuperMenu.document.'+myPath+'.left'));
}
//-->
</script>
<style type="text/css">
#SuperMenu{position:absolute; left:50px;}
</style>
</head>
<body>
    <div id="SuperMenu" nowrap>
    <span id="mit" style="position:absolute;"><A name="Submenu_varemaerke" class="menulink" href="etellerandet.php" onmouseover="vismenu('mit','Submenu_varemaerke','varemaerke')">Varemærke</A></span>
    <span id="mit2" style="position:absolute; left:150px"><A name="submenu_varemaerke2" class="menulink2" href="nogetandet.php" onmouseover="vismenu('mit2','submenu_varemaerke2','produkt')">produkt</A></span>
    </div>
</body>
</html>

/Vh
Avatar billede mhedex Nybegynder
22. maj 2000 - 20:39 #9
Jeg får bare smidt document.layers.SuperMenu has no properties i hovedet??
Avatar billede olebole Juniormester
22. maj 2000 - 20:55 #10
Hmmm...det må være platforms afhængig! MacG3 / NN4.08 fortolker det, som jeg havde tænkt det - spørgsmålet er så, om jeg taler rent...!?! ;-)))
Prøv disse og fortæl lige, hvad der sker:
    alert(eval('document.layers.SuperMenu.document.layers.'+myPath+'.left'));
og:
    alert(eval('document.layers[\'SuperMenu\'].document.'+myPath+'.left'));
og:
    alert(eval('document.layers[\'SuperMenu\'].document.layers[\''+myPath+'\'].left'));
Avatar billede olebole Juniormester
22. maj 2000 - 20:57 #11
shit...den nederste skulle være:
    alert(eval('document.layers[\'SuperMenu\'].document.layers[\'''+myPath+'\'].left'));
Avatar billede mhedex Nybegynder
22. maj 2000 - 20:58 #12
Avavavav!!

Den kode du skrev i indlæget kl 20.15 virker fint.. min kode (som ser lidt anderledes ud) virker ikke... jeg kigger lige lidt på det..
Avatar billede mhedex Nybegynder
22. maj 2000 - 21:23 #13
Jeg må drage konklusionen at jeg er blevet sindssyg!!

her er i korte træk min funktion:


else if (ns4){
  alert(eval("document.layers.SuperMenu.document.submenu_"+submenu+".left"));
}



og her er kaldene:

<div class="menu" id="SuperMenu" nowrap>   
    &nbsp| <span id="submenu_varemaerke" style="position:absolute;"><A class="menulink" href="admin.php?varemærke=oversigt" onmouseover="vismenu('varemaerke')">Varemærke</A></span>
    &nbsp| <span id="submenu_produkt" style="position:absolute;"><A class="menulink" href="admin.php?produkt=oversigt" onmouseover="vismenu('produkt')">produkt</A></span>
    &nbsp| <span id="submenu_galleri" style="position:absolute;"><A class="menulink" href="admin.php?galleri=oversigt" onmouseover="vismenu('galleri')">galleri</A></span>
    &nbsp| <span id="submenu_links2" style="position:absolute;"><A class="menulink" href="admin.php?links=oversigt" onmouseover="vismenu('links2')">links</A></span>
    &nbsp| <span id="submenu_kunde" style="position:absolute;"><A class="menulink" href="admin.php?kunde=oversigt" onmouseover="vismenu('kunde')">kunder</A></span>
    &nbsp| <span id="submenu_ordre" style="position:absolute;"><A class="menulink" href="admin.php?ordre=oversigt" onmouseover="vismenu('ordre')">ordrer</A></span> |&nbsp
    </div>


Jeg kan sagtens bede om document.SuperMenu.left.
Men når jeg beder om document.layers.SuperMenu.document.submenu_varemaerke.left, siger den øvøvøv!

Jeg kan heller ikke fjerne SuperMenu Div'et og så kalde direkte efter document.submenu_varemaerke.left.
Den sigeR: Document.submenu_varemaerke has no properties...
HVAHVAHVA???
Avatar billede olebole Juniormester
22. maj 2000 - 21:43 #14
"Jeg kan heller ikke fjerne SuperMenu Div'et og så kalde direkte efter document.submenu_varemaerke.left."
Prøv:
document.layers.submenu_varemaerke.left.

"Men når jeg beder om document.layers.SuperMenu.document.submenu_varemaerke.left, siger den øvøvøv!"
Prøv lige de tre alert'er, jeg skrev højere oppe - og kom tilbage med en præcis melding om, hvad de siger.
Åben også dit JavaScript Typein vindue (skriv:  java script:  i din adresselinie og tryk 'Enter'), der kan stå meget godt ;-))
Avatar billede mhedex Nybegynder
22. maj 2000 - 21:45 #15
Ja, jeg er efterhånden blevet rimeligt glad for mit JavaScript Typein vindue... :-)

Mit problem er, at dit script fungerer perfekt.. mit stinker. Jeg prøver lige dine bud!
Avatar billede mhedex Nybegynder
22. maj 2000 - 21:52 #16
Nu har jeg prøvet de andre...:

document.layers.SuperMenu.document.layers.submenu_varemaerke has no properties (eller den der nu passer til de enkelte bud) altså gennemgående HAS NO PROPERTIES..

Det har før været et problem, når en position var Relative, men de er alle absolute...

Jeg forstår det ikke??!?!?!?!?
Avatar billede olebole Juniormester
22. maj 2000 - 22:06 #17
Problemet er underscores i id'en...prøv denne her:

<html>
<head>
<script language="javascript">
<!--
function vismenu(submenu){
      alert(eval('document.layers.SuperMenu.document.submenu'+submenu+'.left'));
}
//-->
</script>
<style type="text/css">
#SuperMenu{position:absolute; left:50px;}
</style>
</head>
<body>
    <div class="menu" id="SuperMenu" nowrap>   
    <span id="submenuvaremaerke" style="position:absolute; left:0px;"><A class="menulink" href="admin.php?varemærke=oversigt" onmouseover="vismenu('varemaerke')">Varemærke</A></span>
    <span id="submenuprodukt" style="position:absolute; left:100px;"><A class="menulink" href="admin.php?produkt=oversigt" onmouseover="vismenu('produkt')">produkt</A></span>
    <span id="submenugalleri" style="position:absolute; left:200px;"><A class="menulink" href="admin.php?galleri=oversigt" onmouseover="vismenu('galleri')">galleri</A></span>
    <span id="submenulinks2" style="position:absolute; left:300px;"><A class="menulink" href="admin.php?links=oversigt" onmouseover="vismenu('links2')">links</A></span>
    <span id="submenukunde" style="position:absolute; left:400px;"><A class="menulink" href="admin.php?kunde=oversigt" onmouseover="vismenu('kunde')">kunder</A></span>
    <span id="submenuordre" style="position:absolute; left:500px;"><A class="menulink" href="admin.php?ordre=oversigt" onmouseover="vismenu('ordre')">ordrer</A></span>
    </div>
</body>
</html>
Avatar billede mhedex Nybegynder
22. maj 2000 - 22:21 #18
hov..

Den er god nok.. problemet er nu, at jeg manuelt skal sætte positionen for alle Span'er og så er ideén med at kunne placere undermenuerne dynamisk totalt væk..
Jeg er ved at være godt træt af Netscape!
Er der ikke mulighed for at lade Span'erne være absolute og så alligevel få fat i deres left??
Avatar billede olebole Juniormester
22. maj 2000 - 22:29 #19
Kan du ikke maile mig, så skal jeg nok smide vore resultat op til sidst. Jeg skal lige hente nogle smøger og have lavet lidt Java (...Hehe...!), så skal jeg sidde parat ;-)

Du kan sagtens lade være med at give dem en 'left' - det var bare for at gøre dem fri af hinanden, så vi kunne teste. Jeg går udfra, at du vil bruge deres left og width til at placere dem ved siden af hinanden med. Det kan du stadig gøre - de vil bare alle lægge ud med en left:0 som default. Det er så den, du skal sætte dynamisk.
Jeg er tilbage på pinden om et kvarter ;-)

Adressen, hvis du får brug for den:
oc@adr.dk
Avatar billede olebole Juniormester
23. maj 2000 - 00:53 #20
OK...dette var, hvad vi kom frem til! Det er ikke så 'sexy', som det kunne have været, men det skulle være hurtigt færdigt til en valgfagsopgave. Menupunkterne skal fordeles på siden og det bliver de nu :-)

<html>
<head>
<script language="javascript">
<!--

// ---------- Sæt 'num' til antallet af dine <span> ------------------
var num = 6;
// ---------- Sæt det luft, du vil have mellem dine <span> -----------
var mySpace = 20;

function init() {
    for (i=1; i<=num; i++) {
        myThisSpan = eval('document.layers.submenu'+i);
        myLeft = myThisSpan.left;
        myWidth = myThisSpan.document.width;
        myNextLeft = myLeft+myWidth+mySpace;
        if (i<num) {
            myNextSpan = eval('document.layers.submenu'+(i+1));
            myNextSpan.left = myNextLeft;
        }
        myThisSpan.visibility = "show";
    }
}
//-->
</script>

</head>
<body onload=init();> 
   
    <span id="submenu1" style="position:absolute; visibility:hidden;"><A class="menulink" href="admin.php?varemærke=oversigt">Varemærke</A></span>
    <span id="submenu2" style="position:absolute; visibility:hidden;"><A class="menulink" href="admin.php?produkt=oversigt">produkt</A></span>
    <span id="submenu3" style="position:absolute; visibility:hidden;"><A class="menulink" href="admin.php?galleri=oversigt">galleri</A></span>
    <span id="submenu4" style="position:absolute; visibility:hidden;"><A class="menulink" href="admin.php?links=oversigt">links</A></span>
    <span id="submenu5" style="position:absolute; visibility:hidden;"><A class="menulink" href="admin.php?kunde=oversigt">kunder</A></span>
    <span id="submenu6" style="position:absolute; visibility:hidden;"><A class="menulink" href="admin.php?ordre=oversigt">ordrer</A></span>

</body>
</html>

/Vh
Avatar billede olebole Juniormester
23. maj 2000 - 04:12 #21
Og her en lidt udvidet version, der er X-browser (det ville dog stadigvæk være fiksere at bygge et objekt og så manipulere det...nuvel!):

<html>
<head>
<script language="javascript">
<!--
// ---------- Brug evt. din eget browsercheck ------------------
var ie4 = document.all;
var ns4 = document.layers;
// ---------- Sæt 'num' til antallet af dine <span> ------------------
var num = 6;
// ---------- Sæt det luft, du vil have mellem dine <span> -----------
var mySpace = 20;
// ---------- Sæt den mængde luft, der skal være før første menupunkt -----------
var initSpace = 150;

function init() {
    myFirstSpan = ns4? document.layers.submenu1 : document.all.submenu1;
    if (ns4) { myFirstSpan.left = initSpace; }
    if (ie4) { myFirstSpan.style.pixelLeft = initSpace; }
    for (i=1; i<=num; i++) {
        myThisSpan = ns4? eval('document.layers.submenu'+i) : eval('document.all.submenu'+i);
        myLeft = ns4? myThisSpan.left : myThisSpan.style.pixelLeft;
        myWidth = ns4? myThisSpan.document.width : myThisSpan.offsetWidth;
        myNextLeft = myLeft+myWidth+mySpace;
        if (i<num) {
            myNextSpan = ns4? eval('document.layers.submenu'+(i+1)) : eval('document.all.submenu'+(i+1));
            if (ns4) { myNextSpan.left = myNextLeft; }
            if (ie4) { myNextSpan.style.pixelLeft = myNextLeft; }
        }
    }
    myOpen();
}

// ---------- Funktioner til at tænde og slukke menuen med -----------
var check = 0;
function toggle() {
    if (check == 0) {
        myClose();
        check = 1;
    }else{
        myOpen();
        check = 0;
    }
}
function myOpen() {
    for (i=1; i<=num; i++) {
        myThisSpan = ns4? eval('document.layers.submenu'+i) : eval('document.all.submenu'+i);
        if (ns4) { myThisSpan.visibility = "visible"; }
        if (ie4) { myThisSpan.style.visibility = "visible"; }
    }
}
function myClose() {
    for (i=1; i<=num; i++) {
        myThisSpan = ns4? eval('document.layers.submenu'+i) : eval('document.all.submenu'+i);
        if (ns4) { myThisSpan.visibility = "hidden"; }
        if (ie4) { myThisSpan.style.visibility = "hidden"; }
    }
}
//-->
</script>

</head>
<body onload=init();> 
   
    <span id="submenu1" style="position:absolute; visibility:hidden;"><A class="menulink" href="admin.php?varemærke=oversigt">Varemærke</A></span>
    <span id="submenu2" style="position:absolute; visibility:hidden;"><A class="menulink" href="admin.php?produkt=oversigt">produkt</A></span>
    <span id="submenu3" style="position:absolute; visibility:hidden;"><A class="menulink" href="admin.php?galleri=oversigt">galleri</A></span>
    <span id="submenu4" style="position:absolute; visibility:hidden;"><A class="menulink" href="admin.php?links=oversigt">links</A></span>
    <span id="submenu5" style="position:absolute; visibility:hidden;"><A class="menulink" href="admin.php?kunde=oversigt">kunder</A></span>
    <span id="submenu6" style="position:absolute; visibility:hidden;"><A class="menulink" href="admin.php?ordre=oversigt">ordrer</A></span>

<br><br><br><br>
<a href="java script:myOpen();">Vis</a><br><br>
<a href="java script:myClose();">Skjul</a><br><br>
<a href="java script:toggle();">Vis / Skjul</a><br><br>
</body>
</html>

Roger over - and out ;-))
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