[Javascript/IE] CSS bewerken mislukt

Pagina: 1
Acties:

  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 18-05 11:46
Voor mijn website probeer ik een menutje te maken wat verschijnt op de positie van je muis zodra je klikt. Ik ben uiteraard al druk bezig geweest en het is dan ook gelukt. Dacht ik, toen ik namelijk met IE mijn site opende blijkt dat daar een mooie javascript error krijg.

Het menutje bestaat uit het volgende divje:
HTML:
1
2
3
4
5
6
7
8
9
10
[...]
    <div class="Menu" id="fileMenu">
        <table class="menuTable">
            <tr><td>Open</td></tr>
            <tr><td>Edit</td></tr>
            <tr><td>Hernoemen</td></tr>
            <tr><td>Verwijder</td></tr>
        </table>
    </div>
[...]


Deze is met behulp van wat CSS verborgen en staat braaf te wachten in de linker bovenhoek tot hij nodig is:
Cascading Stylesheet:
1
2
3
4
5
6
7
div.Menu
{
    position: absolute;
    top: 0px;
    left: 0px;
    visibility: hidden;
}


Nu heb ik een stukje javascript geschreven wat de het divje zou moeten herpositioneren en visible maken:
JavaScript:
1
2
3
4
5
6
7
8
function showMenu(menu, event)
{
    document.getElementById(menu).style.top = (event.clientY +
self.pageYOffset) + 'px;';
    document.getElementById(menu).style.left = (event.clientX +
self.pageXOffset) + 'px;';
    document.getElementById(menu).style.visibility = 'visible;';
}

Deze wordt dus aangeroepen zodra je klikt, in Mozilla gaat het prima. Geen javascript errors/warnings in de console. Het menu wordt ook netjes op de juiste plaats gezet en visible gemaakt.

Alleen IE gaat op mijn javascript volledig onderuit. Zodra showMenu() aangeroepen wordt met zijn parameters krijg ik een error en wel de volgende: 'Ongeldig argument' Het rare is dat als ik de elementen die ik wil aanpassen in een alert laat weergeven ik wel de juiste waarde terug krijg.

Als ik alleen nog maar de visibility aan wil passen (dus de top en left aanpassingen even weggooi) veranderd de error in: 'Kan de eigenschap visibility niet opvragen. Ongeldig argument.' Terwijl ook deze met een alert gewoon te laten zien is.

Ik heb werkelijk geen idee wat ik fout doe, want alle scripts hier op GoT die CSS dingetjes aanpassen lijken het ook op deze manier te doen. Waarom struikelt IE over mijn javascript?

  • Koeniepoenie
  • Registratie: Oktober 2003
  • Laatst online: 18-05 10:29
Misschien is het handig als je er even bijgeeft hoe je de functie aanroept, want daar gaat het immers fout in IE.

Verder is het misschien handiger met de display property te werken (block/none).

Parse error: syntax error, unexpected GOT_USER in https://gathering.tweakers.net on line 1337


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 16:00

crisp

Devver

Pixelated

Voor IE:
pageYOffset --> screenTop (of scrollTop)
pageXOffset --> screenLeft (of scrollLeft)

handig: http://www.quirksmode.org/viewport/compatibility.html en http://www.quirksmode.org/js/events_compinfo.html

Intentionally left blank


  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 18-05 11:46
De functie wordt met een onClick aangeroepen, op deze manier:
HTML:
1
<a href="#" onclick="showMenu('fileMenu', event);">klik</a>
IE geeft overgens als linenummer steeds de 1e regel uit mijn functie waarmee ik de CSS probeer aan te passen. Dus het lijkt me dat ik daar iets fout doe.

Ondertussen heb ik pageYOffset ondertussen voor IE gewijzigt in scrollTop. Deze geeft inderdaad de juiste waarde terug in IE. Das wel makkelijk. :P
Alleen blijf ik dezelfde errors houden. Het lijkt erop dat de .top property enz niet bestaan als ik ze wil aanpassen, maar opvragen van de waarde lukt wel.

Wat is overgens het voordeel van de display property boven de visibility property?

[ Voor 34% gewijzigd door Mac_Cain13 op 11-11-2004 16:39 ]


  • Koeniepoenie
  • Registratie: Oktober 2003
  • Laatst online: 18-05 10:29
Ik zou ook de puntkomma's voor de zekerheid even weghalen:
code:
1
document.getElementById(menu).style.visibility = 'visible;';

Kun je dus:
code:
1
document.getElementById(menu).style.visibility = 'visible';

van maken.

Verder, de property 'visible' zorgt in bepaalde browsers voor wat problemen. Want voor IE waren het de waardes visible en hidden waar je mee kon spelen, maar ik geloof in Netscape dat het 'show' en 'hide' was. En display is overal hetzelfde.

Parse error: syntax error, unexpected GOT_USER in https://gathering.tweakers.net on line 1337


  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 18-05 11:46
Na wat lezen, prutsen en nog meer lezen op de sites die Crisp gaf is het gelukt. :) De puntkomma's strippen was volgens mij ook nodig, ze horen er iig niet zoals KoenieMan ook al zei. Dus die heb ik ook weg geknikkerd.

Dit is de uiteindelijke code geworden:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function showMenu(menu, event)
{
    var x,y;
    if (self.pageYOffset)
    {
        x = self.pageXOffset;
        y = self.pageYOffset;
    }
    else if (document.documentElement && document.documentElement.scrollTop)
    {
        x = document.documentElement.scrollLeft;
        y = document.documentElement.scrollTop;
    }
    else if (document.body)
    {
        x = document.body.scrollLeft;
        y = document.body.scrollTop;
    }
    
    document.getElementById(menu).style.top = (event.clientY + y) + 'px';
    document.getElementById(menu).style.left = (event.clientX + x) + 'px';
    document.getElementById(menu).style.visibility = 'visible';
}


Dit stukje Javascript lijkt prima te werken! Ik zal nu mijn code nog eens wat opschonen. Hartelijk bedankt!

[ Voor 5% gewijzigd door Mac_Cain13 op 11-11-2004 17:07 ]

Pagina: 1