Die automatische Vervollständigung von jQuery-UI wird nicht gut angezeigt. Z-Index-Problem


82

Ich implementiere derzeit die automatische Vervollständigung der jQuery-Benutzeroberfläche in meinem Kunden-Webshop. Das Problem ist: Das Element, in dem sich die automatische Vervollständigung befindet, hat einen höheren Z-Index als der Z-Index der automatischen Vervollständigung. Ich habe versucht, den Z-Index für die automatische Vervollständigung manuell festzulegen, aber ich habe das Gefühl, dass die jQuery-Benutzeroberfläche dies überschreibt.

In der Tat ist meine Frage ein Duplikat der Autocomplete-Vorschlagsliste falscher Z-Index. Wie kann ich das ändern? , aber da es keine Antwort gab, dachte ich darüber nach, es noch einmal zu versuchen.

Jede Hilfe ist willkommen!

Martijn



2
Da es keine Codebeispiele gibt, kann ich empfehlen, den Z-Index so !important
festzulegen,

Ich habe das gleiche Problem, aber der Fehler tritt nur in Chrome auf. Hier scheint keine Lösung zu funktionieren. Kann mir jemand helfen?
Nivs

Antworten:


103

Verwenden Sie z-indexund!important

.ui-autocomplete { position: absolute; cursor: default;z-index:30 !important;}  

Es ist eine Weile her, seit ich diese Frage gestellt habe, aber ich erinnere mich vage, dass Javascript (und damit jQuery) CSS-Eigenschaften überschreiben konnte, obwohl sie als "! Wichtig" definiert sind.
Martijn

1
+1 using! Important in meinem benutzerdefinierten Stylesheet hat auch für mich perfekt funktioniert und war eine viel bessere Lösung als die Verwendung des open () - Rückrufs.
Alex Fairchild

Ich habe diese Antwort zugunsten meiner eigenen akzeptiert, da ich der Meinung bin, dass diese Lösung viel besser ist. Ich habe die Antwort jedoch nicht überprüft.
Martijn

Ich bin neu bei jQuery und diese Antwort ist sehr gut. Hat für mich gearbeitet. Ich hatte Probleme zu finden, wo .ui-autocomplete war, fand es aber schließlich in jquery-ui.css und gab ihm den Z-Index und die Bratsche, die es funktionierte!
Atsurti

Gute Antwort. Arbeitete auch mit mir. Nur um ein paar Leckerbissen hinzuzufügen. Erstens sind die Autocomplete-Daten in einer Klasse namens ui-autocomplete enthalten, die dann wie oben in Ihrem CSS gestaltet werden kann. Zweitens, wenn Sie die automatische Vervollständigung mit Bootstrap verwenden, hat ein Menü, das immer oben steht, einen Z-Index von 1030, sodass Sie diesen 1031 erstellen müssen. Großartige Lösung. Vielen Dank.
Randy Greencorn

60

Bei der Suche habe ich dieses Thema gefunden (http://forum.jquery.com/topic/alternating-style-on-autocomplete). Anscheinend ist die einzige Möglichkeit, den Stil der Autocomplete-Box zu ändern, die Verwendung von Javascript:

    open: function(){
        $(this).autocomplete('widget').css('z-index', 100);
        return false;
    },

2
Warum kehrst du falsch zurück?
Noyo

Das allgemeine Paradigma bei Ereignishandlern ist, dass die Rückgabe von false verhindert, dass ein Ereignis in die Luft sprudelt. Obwohl ich nach vier Jahren keine Ahnung habe, ob es in dieser Situation tatsächlich notwendig war.
Martijn

2
Vielen Dank für die Antwort, auch wenn es Jahre später ist! Dies ist in Ihrem Fall in der Tat nicht erforderlich und kann in anderen Fällen sogar zu unerwünschtem Verhalten führen. In jedem Fall gibt es für dieses Problem jetzt eine Standardlösung ( ui-frontKlasse + appendToWidget-Option): api.jqueryui.com/theming/stacking-elements
Noyo

10

Ändern Sie den Z-Index des übergeordneten Div. Das Menü für die automatische Vervollständigung enthält den Z-Index des Div + 1


1
Die automatische Vervollständigung wird am Ende des Inhalts des Körpers hinzugefügt, sodass sie dann den Z-Index des Körpers + 1
Marius

8
@Marius, du kannst das benutzen appendTo Option verwenden, um dem Menü-Markup mitzuteilen, wohin es gehen soll. Andernfalls können Sie die Klasse ui-fronteinem der übergeordneten Elemente der Eingabe hinzufügen .
Noyo

1
Noch etwas: Das übergeordnete Div muss die relative Positionierung ('position: relative') verwenden, da jQuery sonst seinen Z-Index nicht bestimmen kann (siehe bugs.jqueryui.com/ticket/5489 )
Felix Schwarz

9

Im CSS von jQuery UI:

.ui-front { z-index: 9999; }

1
Willkommen bei StackOverFlow.com. Dies sollte ein Kommentar oder eine ausführlichere Antwort sein.
Diego C Nascimento

Das ist falsch. Wenn jquery ui etwas Neues anzeigen muss, wird nur der vorherige Z-Index verwendet und um 1 erhöht. Wenn 9999 verwendet wird, funktioniert dies nur einmal. Das nächste UI-Element hat einen Z-Index von 10.000, was das Problem erneut verursacht.
Andrea Mauro

8

Versuchen Sie dies, Sie können den Z-Index zur Laufzeit oder Initialisierung bearbeiten

$('#autocomplete').autocomplete({
    open: function(){
        setTimeout(function () {
            $('.ui-autocomplete').css('z-index', 99999999999999);
        }, 0);
    }
});

2

Wenn Sie in der Lage sind, einen höheren Z-Index für die automatische Vervollständigung der Texteingabe zu erzwingen, ist dies die Lösung für Ihr Problem.

Die Liste der Optionen für die automatische Vervollständigung der jQuery-Benutzeroberfläche berechnet den Z-Index-Wert, indem der Z-Index der Texteingabe verwendet wird, an die er angehängt wird, und 1 zu diesem Wert hinzugefügt wird.

Sie können der Texteingabe also einen Z-Index von 999 geben. Die automatische Vervollständigung hat einen Z-Index-Wert von 1000

Entnommen aus http://bugs.jqueryui.com/ticket/5489

<input type="text" class="autocomplete" style="z-index:999;" name="foo">


0

Sehen Sie sich auch an, wo Sie den Artikel anhängen. Ich bin auf dieses Problem gestoßen, als ich die Autovervollständigung an ein inneres Div angehängt habe, aber als ich die Autovervollständigung an das Body-Tag angehängt habe, ist das Problem verschwunden.



-1

Probieren Sie es trotzdem in Ihrem CSS aus (vor dem Laden des Skripts), nicht in Firebug:

.ui-selectmenu-menu {
    z-index:100;
}

In meinem Fall funktioniert dies und erstellt Z-Indizes wie: 100x (zum Beispiel 1002)


1
Aus irgendeinem Grund funktioniert das Festlegen des Z-Index über CSS nicht. jQuery weist einfach einen eigenen Z-Index-Wert zu. Habe aber eine Lösung gefunden (siehe Antwort unten)
Martijn

-1

Fügen Sie Folgendes hinzu

.ui-autocomplete
{
    z-index:100 !important;
}

in der Datei jquery-custom-ui.css (oder der minimierten, wenn Sie sie verwenden).


-1

Für diejenigen Entwickler, die dieses Plugin noch verwenden. Versuche dies:

.acResults
{
    z-index:1;
}

Für mich war mit z-Index genug: 1, stellen Sie den Wert ein, den Sie in Ihrem Fall benötigen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.