Avatar billede jakobdo Ekspert
12. februar 2004 - 10:19 Der er 7 kommentarer og
2 løsninger

Javascript giver for mange fejl!

<html>
<head>
<title>DHTML</title>
<script language="javascript">
    function show(event,layer_id,button)
    {
        if (button != NULL)
        {
            if (document.layers)
            {
                document.layers[layer_id].visibility='show';
                document.layers[layer_id].style.top = posY(button) + button.offsetHeight;
                document.layers[layer_id].style.left = event.clientX+5;
            }
            else if (document.all)
            {
                document.all[layer_id].style.visibility='visible';
                document.all[layer_id].style.top = posY(button) + button.offsetHeight;
                document.all[layer_id].style.left = event.clientX+5;
            }
            else
            {
                document.getElementById(layer_id).style.visibility='visible';
                document.getElementById(layer_id).style.top = posY(button) + button.offsetHeight;
                document.getElementById(layer_id).style.left = event.clientX+5
            }
        }
    }
   
    function hide(layer_id)
    {
        if (document.layers)
            document.layers[layer_id].visibility='hide';
        else if (document.all)
            document.all[layer_id].style.visibility='hidden';
        else
            document.getElementById(layer_id).style.visibility='hidden';
    }
    function delayHide(layer_id)
    {
        setTimeOut("hide('"+layer_id+"')", 250);
    }
   
    function posX(obj)
    {
      return(obj.offsetParent==null ? obj.offsetLeft : obj.offsetLeft+posX(obj.offsetParent));
    }

    function posY(obj)
    {
      return(obj.offsetParent==null ? obj.offsetTop : obj.offsetTop+posY(obj.offsetParent));
    }
</script>
<style type="text/css">
    #popup   
    {
        position: absolute;
        background-color: #FF0000;
        margin: 5px;
        padding: 5px;
        visibility: hidden;
    }
</style>
</head>
<body>
<div id="popup" onMouseover="show(event,'popup')" onMouseout="delayHide('popup')">
<a href="#">Option1</a><br>
<a href="#">Option2</a><br>
<a href="#">Option3</a>
</div>
<a id="LINK" href="#" onMouseover="show(event,'popup',this)" onMouseout="delayHide('popup')">Options</a>
</body>
</html>

Kan jeg ikke få en til at rette dette til?
Avatar billede o-zone Nybegynder
12. februar 2004 - 10:24 #1
i linie 9 skal NULL staves med småt (null)
Avatar billede jakobdo Ekspert
12. februar 2004 - 10:25 #2
Eller (button)
Avatar billede o-zone Nybegynder
12. februar 2004 - 10:29 #3
setTimeOut i linie 43 skal staves med småt (setTimeout)
Avatar billede o-zone Nybegynder
12. februar 2004 - 10:31 #4
he he he ... men der er tilsyneladende også et mere alvorligt logisk problem, end de to stavefejl :) - med mindre det der meningen at man ikke skal kunne klikke på underpunkterne? ;-P~

Jeg har ikke tid til at gå det hele igennem nu though :(
Avatar billede jakobdo Ekspert
12. februar 2004 - 10:31 #5
Har jeg også rettet, nu har jeg koden:

<html>
<head>
<title>DHTML</title>
<script language="javascript">
    function show(event,layer_id,button)
    {
        if (button)
        {
            if (document.layers)
            {
                document.layers[layer_id].visibility='show';
                document.layers[layer_id].style.top = posY(button) + button.offsetHeight;
                document.layers[layer_id].style.left = event.clientX+5;
            }
            else if (document.all)
            {
                document.all[layer_id].style.visibility='visible';
                document.all[layer_id].style.top = posY(button) + button.offsetHeight;
                document.all[layer_id].style.left = event.clientX+5;
            }
            else
            {
                document.getElementById(layer_id).style.visibility='visible';
                document.getElementById(layer_id).style.top = posY(button) + button.offsetHeight;
                document.getElementById(layer_id).style.left = event.clientX+5
            }
        }
    }
   
    function hide(layer_id)
    {
        if (document.layers)
            document.layers[layer_id].visibility='hide';
        else if (document.all)
            document.all[layer_id].style.visibility='hidden';
        else
            document.getElementById(layer_id).style.visibility='hidden';
    }
    function delayHide(layer_id)
    {
        setTimeout("test2('"+layer_id+"')",250);
    }
   
    function posX(obj)
    {
      return(obj.offsetParent==null ? obj.offsetLeft : obj.offsetLeft+posX(obj.offsetParent));
    }

    function posY(obj)
    {
      return(obj.offsetParent==null ? obj.offsetTop : obj.offsetTop+posY(obj.offsetParent));
    }
</script>
<style type="text/css">
    #popup   
    {
        position: absolute;
        background-color: #FF0000;
        margin: 5px;
        padding: 5px;
        visibility: hidden;
    }
</style>
</head>
<body>
<div id="popup" onMouseover="show(event,'popup')" onMouseout="delayHide('popup')">
<a href="#">Option1</a><br>
<a href="#">Option2</a><br>
<a href="#">Option3</a>
</div>
<a id="LINK" href="#" onMouseover="show(event,'popup',this)" onMouseout="delayHide('popup')">Options</a>
</body>
</html>

Og jeg får denne fejl:

Line: 1
Char: 1
Error: Object Expected
Code: 0

(Nogle som har gode metoder til at debugge javascript, jeg synes fandeme det er svært)
Avatar billede jakobdo Ekspert
12. februar 2004 - 10:32 #6
Der sker ikke noget når du klikker options1-3 og det er meningen pt, da jeg blot "leger"...
Avatar billede yellow Nybegynder
12. februar 2004 - 10:35 #7
function delayHide(layer_id)
    {
        window.setTimeout("hide('"+layer_id+"')",250);
    }
Avatar billede jakobdo Ekspert
12. februar 2004 - 10:40 #8
Damn it...
Jeg havde lige lavet en lille test side, og der virkede det, så jeg brugte copy/paste, og glemte lige test2 -> hide...
Takker, smid et svar yellow...
Avatar billede yellow Nybegynder
12. februar 2004 - 10:42 #9
ok
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