Internet Explorer und wählen Sie Tag-Problem

8

Ich habe das folgende Problem unter Internet Explorer 7/8:

Ich habe ein Popup, das aktiviert wird, wenn der Benutzer einen Link über einen Link bewegt. Das Popup ist ein einfaches <div> , das einige Daten enthält. Innerhalb dieses <div> -Tags gibt es ein <select> -Tag mit einigen <option> s. Ich habe mouseover / mouseout-Ereignisse an die <div & gt; angeschlossen, so dass dieses Popup geöffnet bleibt, während der Cursor darüber ist. Das Problem tritt auf, wenn Sie auf <select> klicken und dann den Cursor über eines der <option> s bewegen. Dies löst das mouseout-Ereignis des <div> -Tags aus bzw. schließt es.

Wie kann ich das Schließen des Popup im IE verhindern?

    
dalizard 06.08.2009, 14:59
quelle

13 Antworten

9

Sie sollten feststellen können, ob die Situation nur mit den Werten des Ereignisses übereinstimmt. Es ist ein wenig verschachtelt, aber es scheint zu funktionieren.

Im Ereignishandler Ihrer äußeren div , tun Sie etwas wie folgt:

%Vor%

Implementiere dann die Methode isReal :

%Vor%

Grundsätzlich erkennt die Methode isReal nur, ob das Ereignis aus dem div kommt. Wenn dies der Fall ist, gibt es false zurück, wodurch vermieden wird, den Befehl zum Ausblenden aufzurufen.

    
mckamey 11.08.2009, 02:12
quelle
2

Mein Vorschlag wäre, ein anderes Flag zu setzen, während das Auswahlfeld den Fokus hat. Schließen Sie das Div nicht, während das Flag gesetzt ist.

    
Tim Booker 06.08.2009 15:06
quelle
0

Was ist mit so etwas:

%Vor%

Die Grundidee ist, dass Sie das Containerelement anzeigen, wenn Sie den Mauszeiger über den Auslöser bewegen. Wenn Sie den Container dann verlassen, wird der Container ausgeblendet. Sie müssten den Container so positionieren, dass er das Triggerelement schneidet, sonst würde es sich sofort verstecken.

    
Tom 13.08.2009 12:38
quelle
0

Warum mouseover / mouseout auf <div> ? Warum nicht einfach <div> auf der Maus zeigen, dann <body onmouseover="hidedivs();"> einstellen Ich weiß nicht, ob das funktionieren würde, aber wenn <div> über dem Körper steht, dann sollte <div> sichtbar bleiben.

    
andrewWinn 13.08.2009 12:45
quelle
0

Viele Leute, die Lösungen / Beispiele posten, scheinen eines nicht zu realisieren: onmouseout-Ereignis auf <div> wird vor onmouseover-Ereignis auf <select> ausgelöst.

Wenn <div> den Fokus verliert (onmouseout), schließe es nicht sofort, sondern nach 500 Millisekunden. Wenn während dieser Zeit <select> den Fokus erhält (mouseover), schließe <div> überhaupt nicht (clearTimeout).

Versuchen Sie auch, mit Ereignispropagation / bubling zu spielen.

    
Jamol 13.08.2009 12:49
quelle
0

Angesichts der Tatsache, dass die Auswahl in IE ein Problem ist, insbesondere wenn es um das gesamte Layering-Problem geht, wo eine Auswahl über einem Div angezeigt wird, obwohl dies nicht der Fall sein sollte, kann ich Sie in die Richtung der YUI-Menüschaltflächen verweisen. Sie sehen wirklich gut aus, sind einfach zu implementieren und werden dieses Problem nicht verursachen

Hier ist ein Link: Ссылка

    
Zoidberg 14.08.2009 03:01
quelle
0

Sie sollten event.stopPropagation() in <select> oder cancelBubble() in <select> element selbst verwenden.

    
Thevs 15.08.2009 09:46
quelle
0

Wie wäre es mit einer erneuten Anzeige des Divs, wenn sich die Maus über den <options> s bis mouseover Events von <options> s befindet.

Edit: Ausführungsreihenfolge von mouseover der Option und mouseout von div kann jedoch Probleme verursachen.

    
palindrom 06.08.2009 15:16
quelle
0

Fügen Sie im mouseout-Ereignis für das div dem Element div ein Zeitlimit hinzu, das das div in etwa 200 Millisekunden ausblendet.

Dann löschen Sie im mouseover-Ereignis für div / select und das click-Ereignis der Auswahl das im div-Element gespeicherte Zeitlimit.

Dies führt zu einer sehr kurzen Verzögerung, bevor das div ausgeblendet wird, wodurch die mouseover- oder click-Ereignisse das Zeitlimit vor der Ausführung löschen können. Es ist nicht schön, aber es sollte funktionieren.

    
David Glenn 06.08.2009 15:25
quelle
0

Anstatt mouseout als Ereignis zu verwenden, um das div zu schließen, benutze mouseleave, dann wird das Ereignis nur ausgelöst, wenn der Zeiger die Grenze des div verlässt, nicht wenn es sich auf andere Elemente innerhalb des div bewegt

    
danwellman 11.08.2009 20:21
quelle
0

Sie könnten versuchen, ein weiteres mouseover-Ereignis speziell für die Optionsliste hinzuzufügen.

    
codedude 12.08.2009 21:01
quelle
0

Nun, der Grund für dieses Verhalten liegt darin, dass die mouseover / out-Ereignisse platzen, was bedeutet, dass jedes Mal, wenn Sie eines der Elemente innerhalb des Popup-Popupmenüs bewegen, das Popup das Ereignis ebenfalls empfängt.

Sie können weitere hier über diese Ereignisse lesen und hier über Event-Sprudeln.

Sie haben hier drei mögliche Lösungen:

  1. Ändern Sie die Ereignisse in onmouseenter / leave. Du hast erwähnt, dass das nicht geholfen hat, was einfach merkwürdig klingt, da diese nicht blubbern sollen.

  2. Überprüfen Sie srcElement in Bezug auf from / toElement im Ereignis.

Eine verbesserte Version von McKAMEY würde folgendermaßen aussehen:

%Vor%

Macht dasselbe, nur kürzer.

3. Eine andere Option wäre, ein transparentes, unsichtbares div direkt unter Ihrem Popup zu erstellen, das den Bereich abdeckt, in den die Auswahlbox hineinfällt. Ich gehe davon aus, dass es außerhalb des eigentlichen Popup-Bereichs fällt.

Hoffe, das hilft!

    
SEK 13.08.2009 06:34
quelle
0

Hast du hover anstelle von mouseover / out-Effekten ausprobiert?

%Vor%     
Jason 13.08.2009 06:40
quelle