Autouzupełnianie jQuery-UI nie wyświetla się dobrze, problem z indeksem Z.


83

Obecnie wdrażam autouzupełnianie interfejsu użytkownika jQuery w sklepie internetowym moich klientów. Problem polega na tym, że element, w którym znajduje się autouzupełnianie, ma wyższy indeks z niż indeks z autouzupełniania. Próbowałem ręcznie ustawić indeks z autouzupełniania, ale mam wrażenie, że interfejs użytkownika jQuery to nadpisuje.

W rzeczywistości moje pytanie jest duplikatem listy sugestii autouzupełniania, nieprawidłowy indeks Z, jak mogę to zmienić? ale ponieważ nie było odpowiedzi, pomyślałem o ponownej próbie.

Każda pomoc jest mile widziana!

Martijn



2
Ponieważ nie ma przykładów kodu, polecam ustawienie indeksu z tak, jak próbowałeś wcześniej i ustawić go na!important
Igor Dymov.

Mam ten sam problem, ale błąd pojawia się tylko w przeglądarce Chrome. Wydaje się, że żadne rozwiązanie tutaj nie działa. Czy ktoś może mi pomóc?
Nivs

Odpowiedzi:


104

Użyj z-indexi!important

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

Minęło trochę czasu, odkąd opublikowałem to pytanie, ale niejasno pamiętam, że javascript (a tym samym jQuery) był w stanie nadpisać właściwości CSS, mimo że są one zdefiniowane jako „! Important”.
Martijn

1
Używanie +1 za pomocą! Ważne w moim niestandardowym arkuszu stylów również działało doskonale i było znacznie lepszym rozwiązaniem niż użycie wywołania zwrotnego open ().
Alex Fairchild

Przyjąłem tę odpowiedź na swoją korzyść, ponieważ zgadzam się, że to rozwiązanie jest o wiele przyjemniejsze. Nie sprawdziłem jednak odpowiedzi ...
Martijn

Jestem nowy w jQuery i ta odpowiedź jest bardzo dobra. Pracował dla mnie. Miałem problem ze znalezieniem miejsca .ui-autocomplete, ale w końcu znalazłem go w jquery-ui.css, nadałem mu indeks z i viola działało!
atsurti

Świetna odpowiedź. Pracował też ze mną. Wystarczy dodać kilka ciekawostek. Po pierwsze, dane autouzupełniania są zawarte w klasie zwanej autouzupełnianiem ui, którą można następnie nadać stylowi w CSS, jak powyżej. Po drugie, jeśli używasz autouzupełniania z Bootstrapem, menu, które jest zawsze na wierzchu, ma indeks Z równy 1030, więc będziesz musiał zrobić to 1031. Świetne rozwiązanie. Dzięki.
Randy Greencorn

60

Podczas wyszukiwania znalazłem ten temat (http://forum.jquery.com/topic/alternating-style-on-autocomplete). Najwyraźniej jedynym sposobem zmiany stylu pola autouzupełniania jest zrobienie tego za pomocą javascript:

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

2
Dlaczego zwracasz fałsz?
Noyo,

Ogólny paradygmat w programach obsługi zdarzeń polega na tym, że zwracanie wartości false zapobiega propagowaniu zdarzenia. Chociaż po czterech latach nie mam pojęcia, czy rzeczywiście było to konieczne w tej sytuacji ..
Martijn

2
Dzięki za odpowiedź, nawet jeśli nastąpi to po latach! Rzeczywiście, nie jest to potrzebne w twoim przypadku, a może nawet powodować niepożądane zachowanie u innych. W każdym razie ten problem ma teraz standardowe rozwiązanie ( opcja ui-frontklasa + appendTowidżet): api.jqueryui.com/theming/stacking-elements
Noyo

10

Zmień indeks z nadrzędnego elementu Div, menu autouzupełniania będzie zawierało indeks z elementu div + 1


1
Autouzupełnianie jest dodawane na końcu treści ciała, więc będzie miało indeks z ciała + 1
Marius

8
@Marius, możesz użyć appendToopcji, aby wskazać znacznikowi menu, gdzie iść, w przeciwnym razie możesz dodać klasę ui-frontdo jednego z elementów nadrzędnych wejścia.
Noyo,

1
Jeszcze jedno: nadrzędny element div musi używać względnego pozycjonowania („position: relative”), w przeciwnym razie jQuery nie będzie w stanie określić swojego indeksu z (patrz bugs.jqueryui.com/ticket/5489 )
Felix Schwarz

9

W CSS jQuery UI:

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

1
Witamy w StackOverFlow.com, to powinien być komentarz lub bardziej rozbudowana odpowiedź.
Diego C Nascimento

to źle, kiedy jquery ui musi wyskoczyć coś nowego, po prostu pobiera poprzedni indeks z i zwiększa go o 1, użycie 9999 sprawia, że ​​działa tylko raz, następny element interfejsu użytkownika będzie miał indeks z równy 10.000, powodując ponownie problem.
Andrea Mauro

8

Spróbuj tego, możesz manipulować indeksem Z w czasie wykonywania lub inicjalizacji

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

2

Jeśli jesteś w stanie wymusić wyższy indeks Z przy autouzupełnianiu wprowadzania tekstu, to jest to rozwiązanie Twojego problemu.

Lista opcji autouzupełniania interfejsu użytkownika jQuery oblicza wartość indeksu z, biorąc indeks z tekstu wejściowego, do którego jest dołączany, i dodaje 1 do tej wartości.

Więc możesz podać indeks z 999 do wprowadzania tekstu, autouzupełnianie będzie miało wartość indeksu z równą 1000

Zaczerpnięte z http://bugs.jqueryui.com/ticket/5489

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


0

spójrz również na miejsce, do którego dołączasz element. Natknąłem się na ten problem, kiedy dodałem autouzupełnianie do wewnętrznego elementu div, ale kiedy dołączyłem autouzupełnianie do tagu body, problem zniknął.



-1

Spróbuj mimo wszystko w swoim css (przed załadowaniem skryptu), a nie w firebug:

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

W moim przypadku to działa i tworzy indeksy z, takie jak: 100x (na przykład 1002)


1
Z jakiegoś powodu ustawienie indeksu Z przez CSS nie działa. jQuery po prostu przypisuje własną wartość z-index. Znalazłem jednak rozwiązanie (patrz odpowiedź poniżej)
Martijn

-1

dodaj następujące elementy

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

w pliku jquery-custom-ui.css (lub zminimalizowanym, jeśli go używasz).


-1

Dla programistów, którzy nadal używają tej wtyczki. Spróbuj tego:

.acResults
{
    z-index:1;
}

U mnie wystarczył z-index: 1, ustaw potrzebną wartość w swoim przypadku.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.