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



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;}  

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;
    },

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


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; }

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);
    }
});

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">


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ó.



-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)


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).


-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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.