Hey mensen,
ik bouw een dropdown menu op vanuit een array in JS
nu wil ik op elk hoofd-item een mouseover en mouseout event zetten en doe dat op de volgende wijze:
ben al aan het prutsen geweest omdat js dus bepaalde vars niet meer kent als je dat in een nieuwe functie zet vandaar de jInt en iInt etc..
het probleem is dus dat als de for loop klaar is en het menu bij test heeft bijv 5 subitems alle events betrekking hebben op de div met het id test5..
op de een of andere manier koppelt hij dus elke mouseover aan de laatste div in de array en niet op elke div apart wat dus zou moeten..
iemand hier een oplossing voor oid, want zit me een beetje dood te staren op deze code
Code kan tegenwoordig ook talen bevatten
ik bouw een dropdown menu op vanuit een array in JS
nu wil ik op elk hoofd-item een mouseover en mouseout event zetten en doe dat op de volgende wijze:
JavaScript:
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
| subMenuItems = new Array( new Array("home", new Array("menu1", "menu1_drop")), new Array("test", new Array("test1", "test1_drop"), new Array("test2", "test2_drop"), new Array("test3", "test3_drop"), new Array("test4", "test4_drop"), new Array("test5", "test5_drop"))); // dynamically build subs for (var i = 0; i < subMenuItems.length; i++) { // hoofdactie if (subMenuItems[i][0] == mainMenuItem) { iInt = i; for (var j = 1; j < subMenuItems[i].length; j++) { jInt = j; if (subMenuItems[i][j].length > 1) { $(subMenuItems[i][jInt][0]).onmouseover = function () { clearTimeout(timer); $(subMenuItems[i][jInt][0]).getElementsByTagName('a')[0].style.background = 'url(' + image_path + 'sub_menu_arrow_active.gif) center right no-repeat'; openSub(subMenuItems[i][0], subMenuItems[i][jInt][0], subMenuItems[i][jInt][1]); } $(subMenuItems[i][jInt][0]).onmouseout = function () { active[subMenuItems[i][jInt][0]] = false; timer = setTimeout("timedClose(subMenuItems[iInt][0])", slideDelay); } $(subMenuItems[i][jInt][1]).onmouseover = function () { clearTimeout(timer); active[subMenuItems[i][jInt][0] + "_" + subMenuItems[i][jInt][1]] = true; } $(subMenuItems[i][jInt][1]).onmouseout = function () { active[subMenuItems[i][jInt][0] + "_" + subMenuItems[i][jInt][1]] = false; timer = setTimeout("timedClose(subMenuItems[iInt][0])", slideDelay); } } else { // sub heeft geen dropdown $(subMenuItems[i][jInt][0]).onmouseover = function () { $(subMenuItems[i][jInt][0]).getElementsByTagName('a')[0].style.background = 'url(' + image_path + 'sub_menu_arrow_active.gif) center right no-repeat'; closeOthers(subMenuItems[iInt][0], subMenuItems[i][jInt][0]); active[subMenuItems[i][jInt][0]] = true; state[subMenuItems[i][jInt][0]] = true; } $(subMenuItems[i][jInt][0]).onmouseout = function () { $(subMenuItems[i][jInt][0]).getElementsByTagName('a')[0].style.background = 'url(' + image_path + 'sub_menu_arrow.gif) center right no-repeat'; active[subMenuItems[i][jInt][0]] = false; state[subMenuItems[i][jInt][0]] = false; } } } break; } } |
ben al aan het prutsen geweest omdat js dus bepaalde vars niet meer kent als je dat in een nieuwe functie zet vandaar de jInt en iInt etc..
het probleem is dus dat als de for loop klaar is en het menu bij test heeft bijv 5 subitems alle events betrekking hebben op de div met het id test5..
op de een of andere manier koppelt hij dus elke mouseover aan de laatste div in de array en niet op elke div apart wat dus zou moeten..
iemand hier een oplossing voor oid, want zit me een beetje dood te staren op deze code
Code kan tegenwoordig ook talen bevatten
[ Voor 0% gewijzigd door BtM909 op 22-03-2007 11:52 ]