2009-07-25 15 views
0

Jedes jQuery-Plugin, das ich gefunden habe, basiert auf <li> Elementen, um die Menüelemente zu generieren.jQuery benutzerdefiniertes Menü

Ich habe <div id = "menubutton"> Element, das die Menü-Taste und andere darstellt, nicht im Zusammenhang mit (maning es ist kein Kind) <div id = "menucontent">, die die Menüpunkte (gemischtes Material, Bilder usw.) enthält. Ich möchte, dass dieses zweite, versteckte div erscheint, wenn ich auf den Knopf klicke. Es sollte sich verstecken, wenn ich die Taste ODER verlasse, wenn ich den Inhalt div lasse, für den Fall, dass ich Elemente auswähle oder Sachen dort mache.

Nun, das ist der Code, den ich bisher habe, aber die ClearTimeout-Sache scheint nicht zu funktionieren. Irgendeine Hilfe? Ein Plugin zu zeigen, um meine Arbeit zu unterstützen, würde auch funktionieren.

Danke!

 var timer; 

     $('#menubutton').click(function() { 
      $('#menucontent').show(); 
     }); 

     $('#menubutton').mouseout(function() { 
      timer = setTimeout('$("#menucontent").hide()', 500); 
     }); 


     $('#menucontent').mouseover(function() { 
      clearTimeout(timer); 
     }).mouseout(function() { 
      setTimeout('$("#menucontent").hide()', 300); 
     }); 

EDIT SOLUTION

löste ich das Problem mit hover insted von Mouseover/mouseout

+0

warum würden Sie es funktioniert die Taste oder verlassen der Inhalt div? Das wäre nervig, wenn du zwischen den beiden Grenzen stecken bleibst und Scheiße einfach grundlos verschwindet. Der eine oder der andere, nicht beides. Bringt dieses Skript Fehler in der Fehlerkonsole? – Sneakyness

+0

keine Fehler auf der Konsole. Übrigens, wenn ich das Menü nicht überkreuze und einfach auf einen anderen Knopf gehe, würde es geöffnet bleiben. Es ist einfach die Art, wie Standard-Menüs funktionieren, ich denke, – pistacchio

Antwort

0

Versuchen Sie folgendes:

$('#menubutton').click(function() { 
     $('#menucontent').show(); 
    }); 

    $('#menubutton').mouseout(function() { 
     $(this).data('myTimer', setTimeout('$("#menucontent").hide()', 500)); 
    }); 

    $('#menucontent').mouseover(function() { 
     clearTimeout($(this).data('myTimer')); 
    }).mouseout(function() { 
     setTimeout('$("#menucontent").hide()', 300); 
    }); 
+0

danke für die Eingabe, aber nein, das gleiche Ergebnis wie zuvor :( – pistacchio

+0

Interessant. In diesem Fall würde ich einige Debugging-Visuals hinzufügen, so dass Sie genau sehen können, wann wann aufgerufen wird, wie eine grüne Box, die anzeigt, wenn der Menubutton Mouseout passiert, eine rote für den Menüinhalt, eine blaue für den Menüinhalt, MouseOut, etc. Etwas passiert nicht so, wie du es erwartest ... – chaos