Alle code hier onder te vinden is hier te downloaden in 1 handig zip bestand.
Inleidinkje
Ik heb een menu gemaakt met een unordered list welke ik met een stylesheet netjes uit laat zien. Echter in deze list elementen staat een klikbare tekst en het list element zelf is niet klikbaar. Ik wilde dit graag oplossen omdat ik dat niet echt mooi vondt; het geheel is tenslotte een soort grote knop... Daarop heb ik een stuk javascript code geschreven dat onload het nodige event toe kent aan de juiste li elementen, oftewel een onclick. In Firefox leverde dit bij de eerste poging al het gewenste resultaat op maar Ie werkte niet mee. Uiteindelijk heb ik een stuk code gemaakt waarvan ik zeker weet dat de javascript ervan moet werken maar het werkt evengoed niet!
Om te kunnen testen waar mijn probleem zat heb ik een testcase gemaakt waarin alleen nog zit wat het probleem veroorzaakt.
To the point.
Als je in de onderstaande html op een menu-item klikt in het bovenste menu krijg je geen javascript alert. (niet op de tekst klikken maar in het blauwe gedeelte rechts!!) Echter in het onderste menu krijg je wel een melding als je op een blauw gedeelte klikt maar hier geven de grijze gedeeltes het verkeerde nummer terug!
Ik heb ontdekt dat als ik in mn css de twee width instellingen weg haal dat dan alles probleemloos werkt. Maar dan kan ik de breedte van mn menu niet meer instellen!! Zet ik er een div of iets dergelijks om het hele menu heen met een bepaalde grootte dan werkt het plotseling ook niet meer.
Aangezien het wel werkt in FF lijkt het me een vage bug in IE, ik lijk tenslotte niet te kunnen klikken op een wel zichtbaar item!! Ik heb zelf geen oplossing of workaround kunnen vinden (oa z-index geprobeerd) en ik hoop dat iemand weet waar deze vagigheid vandaan komt!
De code
Alle code hieronder heb ik aangepast en ook alle code nodig voor FF er uit gehaald. Dus niet proberen met FF het zal er niet mee werken!!
Inleidinkje
Ik heb een menu gemaakt met een unordered list welke ik met een stylesheet netjes uit laat zien. Echter in deze list elementen staat een klikbare tekst en het list element zelf is niet klikbaar. Ik wilde dit graag oplossen omdat ik dat niet echt mooi vondt; het geheel is tenslotte een soort grote knop... Daarop heb ik een stuk javascript code geschreven dat onload het nodige event toe kent aan de juiste li elementen, oftewel een onclick. In Firefox leverde dit bij de eerste poging al het gewenste resultaat op maar Ie werkte niet mee. Uiteindelijk heb ik een stuk code gemaakt waarvan ik zeker weet dat de javascript ervan moet werken maar het werkt evengoed niet!
Om te kunnen testen waar mijn probleem zat heb ik een testcase gemaakt waarin alleen nog zit wat het probleem veroorzaakt.
To the point.
Als je in de onderstaande html op een menu-item klikt in het bovenste menu krijg je geen javascript alert. (niet op de tekst klikken maar in het blauwe gedeelte rechts!!) Echter in het onderste menu krijg je wel een melding als je op een blauw gedeelte klikt maar hier geven de grijze gedeeltes het verkeerde nummer terug!
Ik heb ontdekt dat als ik in mn css de twee width instellingen weg haal dat dan alles probleemloos werkt. Maar dan kan ik de breedte van mn menu niet meer instellen!! Zet ik er een div of iets dergelijks om het hele menu heen met een bepaalde grootte dan werkt het plotseling ook niet meer.
Aangezien het wel werkt in FF lijkt het me een vage bug in IE, ik lijk tenslotte niet te kunnen klikken op een wel zichtbaar item!! Ik heb zelf geen oplossing of workaround kunnen vinden (oa z-index geprobeerd) en ik hoop dat iemand weet waar deze vagigheid vandaan komt!
De code
Alle code hieronder heb ik aangepast en ook alle code nodig voor FF er uit gehaald. Dus niet proberen met FF het zal er niet mee werken!!
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> <head> <title>test1</title> <link rel="stylesheet" href="probleem.css" type="text/css"> <script type="text/javascript" src="test.js"></script> </head> <body onload="fnInit();"> <div id="mainMenuContainer"> <ul> <li id="item0"><a href="/home">Home</a></li> <li id="item1"><a href="/aboutus">About us</a></li> <li id="item2"><a href="/products">Products</a></li> <li id="item3"><a href="/careers">Careers</a></li> <li id="item4"><a href="/contactus">Contact us</a></li> </ul> <br> <ul> <li id="item5"><a href="/home">Home</a></li> <li id="item6"><a href="/aboutus">About us</a></li> <li id="item7"><a href="/products">Products</a> <ul> <li id="item8"><a href="/products/online">Online</a></li> <li id="item9"><a href="/products/cdrom">CD-ROM</a></li> <li id="item10"><a href="/products/books">Books</a></li> </ul></li> <li id="item11"><a href="/careers">Careers</a></li> <li id="item12"><a href="/contactus">Contact us</a></li> </ul> </div> </body> </html> |
Cascading Stylesheet:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| #mainMenuContainer ul { margin : 0; padding : 0; width : 161px; border-top : 1px solid gray; border-left : 1px solid gray; border-right : 1px solid gray; background-color : blue; } #mainMenuContainer ul * { color : #fff; text-decoration : none; } #mainMenuContainer ul li { margin : 0; padding : 0; list-style-image : none; list-style-type : none; border-bottom : 1px solid gray; padding-left : 4px; padding-bottom : 1px; } #mainMenuContainer ul li a { margin-left : 6px; } #mainMenuContainer ul li ul { width : 100%; background-color : #eee; } #mainMenuContainer ul li ul * { color : blue; } #mainMenuContainer ul li ul li { margin : 0; padding : 0; list-style-image : none; list-style-type : none; border-top : 1px solid gray; border-bottom : 0; padding-left : 10px; padding-bottom : 1px; } |
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| function fnGetMenuURL( oLi ) { oAnchor = oLi.getElementsByTagName( 'a' ); for ( var i = 0; i < oAnchor.length; i++ ) { if ( oAnchor[i].href != '' ) { return oAnchor[i].href; } } }; function fnInit() { // Find the li elements and only add the events here oLi = document.getElementById( 'mainMenuContainer' ).getElementsByTagName( 'li' ); for ( var i = 0; i < oLi.length; i++ ) { var mTest = new Function('alert(\''+oLi[i].id+'\'); event.cancelBubble = true;'); oLi[i].attachEvent('onclick',mTest); } }; |
[ Voor 13% gewijzigd door RwD op 12-05-2005 15:14 ]