El autocompletado de jQuery-UI no se muestra bien, problema de índice z

83

Actualmente estoy implementando el autocompletado de jQuery UI en la tienda web de mis clientes. El problema es: el elemento en el que reside el autocompletado tiene un índice z más alto que el índice z del autocompletado. Intenté configurar el índice z de autocompletar manualmente, pero tengo la sensación de que jQuery UI está sobrescribiendo esto.

De hecho, mi pregunta es un duplicado del índice z incorrecto de la lista de sugerencias de autocompletar, ¿cómo puedo cambiar? , pero como no hubo respuesta, pensé en intentarlo de nuevo.

¡Cualquier ayuda es bienvenida!

Martijn

Martijn
fuente
3
¿Esto te ayudará? stackoverflow.com/questions/3549860/…
Tim
2
Dado que no hay ejemplos de código que podría recomendar al conjunto z-index como se trató antes y la ajuste en!important
Igor Dymov
Tengo el mismo problema, pero el error viene solo en Chrome. Ninguna solución aquí parece funcionar. ¿Puede alguien ayudarme?
Nivs

Respuestas:

104

Utilice z-indexy!important

.ui-autocomplete { position: absolute; cursor: default;z-index:30 !important;}  
Rancho
fuente
Ha pasado un tiempo desde que publiqué esta pregunta, pero recuerdo vagamente que javascript (y por lo tanto jQuery) fue capaz de sobrescribir las propiedades CSS a pesar de que están definidas como "! Important".
Martijn
1
+1 usando! Important en mi hoja de estilo personalizada también funcionó perfectamente bien para mí y fue una solución mucho mejor que usar la devolución de llamada open ().
Alex Fairchild
He aceptado esta respuesta a favor de la mía, ya que estoy de acuerdo en que esta solución es mucho mejor. Sin embargo, no he comprobado la respuesta ..
Martijn
Soy nuevo en jQuery y esta respuesta es muy buena. Trabajó para mi. Tuve problemas para encontrar dónde estaba .ui-autocomplete, pero finalmente lo encontré en jquery-ui.css le di el índice z y viola ¡funcionó!
atsurti
Gran respuesta. También trabajó conmigo. Solo para agregar un par de cositas. Primero, los datos de autocompletar están contenidos dentro de una clase llamada ui-autocomplete, que luego se puede diseñar en su css como se indicó anteriormente. En segundo lugar, si está utilizando la función de autocompletar con Bootstrap, un menú que siempre está en la parte superior tiene un índice z de 1030, por lo que deberá hacer este 1031. Excelente solución. Gracias.
Randy Greencorn
60

Mientras buscaba, encontré este tema (http://forum.jquery.com/topic/alternating-style-on-autocomplete). Aparentemente, la única forma de cambiar el estilo del cuadro de autocompletar es haciéndolo a través de javascript:

    open: function(){
        $(this).autocomplete('widget').css('z-index', 100);
        return false;
    },
Martijn
fuente
2
¿Por qué regresa falso?
Noyo
El paradigma general en los controladores de eventos es que devolver falso evitará que un evento se propague. Aunque después de cuatro años no tengo idea de si era realmente necesario en esta situación ..
Martijn
2
Gracias por la respuesta, ¡aunque sea años después! De hecho, esto no es necesario en su caso, e incluso puede causar un comportamiento no deseado en otros. En cualquier caso, este problema tiene una solución estándar ahora ( ui-frontclase + appendToopción de widget): api.jqueryui.com/theming/stacking-elements
Noyo
10

Cambie el índice z de la Div principal, el menú de autocompletar tendrá el índice z de la div + 1

Graciano
fuente
1
El autocompletado se agrega al final del contenido del cuerpo, por lo que tendrá el índice z del cuerpo + 1
Marius
8
@Marius, puede usar la appendToopción para indicarle al marcado del menú a dónde ir; de lo contrario, puede agregar la clase ui-fronta uno de los elementos principales de la entrada.
Noyo
1
Una cosa más: el div padre debe usar posicionamiento relativo ('posición: relativa'), de lo contrario jQuery no podrá determinar su índice z (ver bugs.jqueryui.com/ticket/5489 )
Felix Schwarz
9

En el CSS de jQuery UI:

.ui-front { z-index: 9999; }
maseo
fuente
1
Bienvenido a StackOverFlow.com, esto debería ser un comentario o una respuesta más elaborada.
Diego C Nascimento
eso está mal, cuando jquery ui necesita mostrar algo nuevo, solo toma el índice z anterior y lo aumenta en 1, usar 9999 hace que solo funcione una vez, el siguiente elemento de la interfaz de usuario tendrá un índice z de 10.000, lo que volverá a causar el problema.
Andrea Mauro
8

Pruebe esto, puede manipular el índice z en tiempo de ejecución o inicializar

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

Si puede aplicar un índice z más alto en la entrada de texto de autocompletar, esta es la solución a su problema.

La lista de opciones de Autocompletar de la interfaz de usuario de jQuery calcula su valor de índice z tomando el índice z de la entrada de texto a la que se adjunta y agrega 1 a ese valor.

Para que pueda dar un índice z de 999 a la entrada de texto, el autocompletado tendrá un valor de índice z de 1000

Tomado de http://bugs.jqueryui.com/ticket/5489

<input type="text" class="autocomplete" style="z-index:999;" name="foo">
Harry B
fuente
2
open: function () {
    $(this).autocomplete('widget').zIndex(10);
}
raviraj shimpi
fuente
0

también eche un vistazo a dónde está agregando el elemento. Me encontré con este problema cuando agregué el autocompletar a un div interno, pero cuando agregué el autocompletar a la etiqueta del cuerpo, el problema desapareció.

pgee70
fuente
-1

Pruébelo de todos modos en su css (antes de cargar el script), no en firebug:

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

En mi caso, esto funciona y crea índices z como: 100x (por ejemplo, 1002)

avall
fuente
1
Por alguna razón, configurar el índice Z a través de CSS no funciona. jQuery simplemente asigna su propio valor de índice z. Sin embargo, encontré una solución (vea la respuesta a continuación)
Martijn
-1

agregue lo siguiente

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

en el archivo jquery-custom-ui.css (o el minificado si lo está usando).

Zeeshan Ali
fuente
-1

Para aquellos desarrolladores que todavía usan este complemento. Prueba esto:

.acResults
{
    z-index:1;
}

Para mí fue suficiente con z-index: 1, establezca el valor que necesita en su caso.

Yasel
fuente