|
| Autor |
Nachricht |
fabarazzi Stammuser [User]


Anmeldung: 29.12.07 Beiträge: 32 Wohnort: Augsburg
|
Verfasst am: 29.12.2007, 12:27 Titel: Brauche Hilfe bei Javascript-Code |
|
|
Hi erstmal..Ich hab mir gestern ein Menü Zusammengeschrieben mit Javascript. Das Problem ist bei der "else" Abfrage. Wenn ich dieses Menü nun anschaue, schließt es sich nach der angegeben Zeit wieder, auch wenn ich mit der Maus noch drauf bin. Wenn ich jetzt das hier: "window.setTimeout..." mit dem hier ersetze: "document.getElementById(..).style.display=..." funktionierts. Warum? Kann mir einer von euch weiterhelfen? Hier erst mal der Code:
| Code: |
<script type="text/javascript" language="JAVASCRIPT">
function menus(mode,menu)
{
if(mode=='s')
{
document.getElementById(menu).style.display='block';
}
else
{
window.setTimeout('document.getElementById("'+menu+'").style.display="none";', 700);
}
}
</script>
|
und hier das zugehörige HTML
| Code: |
<div class="headpoint" onmouseover="menus('s', 'team')" onmouseout="menus('h', 'team')">
Team
<span style="display:none;" id="team">
<a href="" class="link">Link #1</a>
<a href="" class="link">Link #2</a>
<a href="" class="link">Link #3</a>
<a href="" class="link">Link #4</a>
<a href="" class="link">Link #5</a>
<a href="" class="link">Link #6</a>
</span>
</div>
|
Schon mal danke im voraus.
|
|
| Nach oben |
|
 |
eforium Bekannter [Mod]


Anmeldung: 20.01.06 Beiträge: 1304 Wohnort: Irgendwo i ...
|
|
| Nach oben |
|
 |
fabarazzi Stammuser [User]


Anmeldung: 29.12.07 Beiträge: 32 Wohnort: Augsburg
|
Verfasst am: 30.12.2007, 14:58 Titel: |
|
|
Danke, aber wenn das den PC so stark belastet, gibt es dann auch andere Möglichkeiten diese Menü nach einer gewissen Zeit zu schließen (Alternative zu setTimeout)?
(Ich kenn mich mit JavaScript nämlich auch nicht so aus)
|
|
| Nach oben |
|
 |
Professor Stammuser [User]

Anmeldung: 02.11.07 Beiträge: 28
|
Verfasst am: 30.12.2007, 18:13 Titel: |
|
|
hallo
das problem besteht darin, dass obwohl das mouseover und mouseout
in einem div container gesetzt sind, zwischen den einzelnen elementen
wie link1 und link2 kleine zwischenräume bestehen, die das mouseout
ansprechen
dieses problem läßt sich aber mit einer etwas anderen anordnung des timeout
befehls und einer kleinen hilfsvariablen umgehen
| Code: |
<script type="text/javascript" language="JAVASCRIPT">
var over="no";
function menu_in(menu) {
document.getElementById(menu).style.display='block';
over="yes";
}
function menu_out(menu) {
over="no";
window.setTimeout("menu_off('"+menu+"')", 700);
}
function menu_off(menu) {
if(over !="yes") {
document.getElementById(menu).style.display="none";
}
}
</script>
|
der übersichtheitshalber habe ich die mouseover und mouseout
in separate funktionen gepackt
| Code: |
onmouseover="menu_in('team');" onmouseout="menu_out('team');"
|
prof.
|
|
| Nach oben |
|
 |
fabarazzi Stammuser [User]


Anmeldung: 29.12.07 Beiträge: 32 Wohnort: Augsburg
|
Verfasst am: 30.12.2007, 21:37 Titel: |
|
|
Cool danke, es klappt, aber so ganz hab ich das noch nicht kapiert.
Die Links sind bei mir durch eine CSS-Klasse auf display:block; gestellt, außerdem wenn ich das ganze ohne window.setTimeout anwede, klappt alles auch bei meinem Code super.
Kannst du mir das vielleicht nochmal erklären?
|
|
| Nach oben |
|
 |
Professor Stammuser [User]

Anmeldung: 02.11.07 Beiträge: 28
|
Verfasst am: 31.12.2007, 00:57 Titel: |
|
|
richtig, rein von der menschlichen logik her würde man
tatsächlich annehmen, dass der div container in dem die
mouseover und mouseout befehle verankert sind für
den gesamten bereich gelten sollten
tatsächlich verhält es sich mit einem solchen element aber
etwas anders, ersetzte doch testweise einmal den gesamten
settimeout in deinem original script mit einem alert("test")
dann sieht man, dass die im übergeordenten container
festgesetzen befehle auch bei jedem sogenannten kindknoten
innerhalb dieses elementes ausgeführt werden
das hängt mit der objektorientierten programmierung von
javascript zusammen bzw. mit der struktur von html elemten
(elternknoten - kindknoten)
in deinem beispiel wäre <div> der elternknoten und der erste
kindknoten das wort team gefolgt von einem erneuten elternknoten
<span> in dem dann wiederum kindknoten (die links) enthalten sind
muss man sich wie eine schachtel in der schachtel in der schachtel
vorstellen
ist schon ein wenig zum verrückt werden, weil man das ebend so
auch nicht vermuten würde
prof.
|
|
| Nach oben |
|
 |
fabarazzi Stammuser [User]


Anmeldung: 29.12.07 Beiträge: 32 Wohnort: Augsburg
|
Verfasst am: 31.12.2007, 18:48 Titel: |
|
|
Danke für die Antwort, ich glaub ich habs kapiert. Ich wünsch Dir einen guten Rutsch..
|
|
| Nach oben |
|
 |
|
|