Búsqueda de sitios web

html - Hacer clic en el desplegable mueve el cuerpo de la página. primeng


Tengo 2 menús desplegables en Datatables para filtrar el contenido y tengo un error. Cuando un menú desplegable está en el lado derecho de la página, desplaza la página hacia la izquierda aproximadamente 10 px. Y en el caso opuesto, cuando el menú desplegable está a la izquierda, desplaza la página hacia la derecha. Con el primer clic no pasa nada, pero solo cuando intento cambiar el valor seleccionado.

<p-dropdown 
id="ListFilter_priority_dropdown" 
inputId="ListFilter_priority_dropdown_input" #priorityDropdown 
styleClass="my-form-control" [options]="prioritySelectItems" 
[showClear]="true" placeholder="Select" 
(onChange)="filter($event.value)" appendTo="body"> <ng-template 
let-option pTemplate="item"> <div 
id="ListFilter_priority_item_container"> <span 
id="ListFilter_priority_dropDown_{{option.label}}">{{option.label}}</span>
 </div> </ng-template> </p-dropdown>

Angular v 13.3.8 Versión de PrimeNG 13.4.1 Compilación/Ejecución - Aplicación Angular CLI

Ya he intentado jugar con la posición del "body" - absoluta, estática, relativa, y s.o., pero no funciona tan bien como cambiar la propiedad "appendTo" del menú desplegable.

Respuesta #1

Esto parece un error no resuelto con el componente p-dropdown de PrimeNG. Otras personas están teniendo este problema:

https://github.com/primefaces/primeng/issues/10992

https://github.com/primefaces/primeng/issues/11046

Sin embargo, pude superar el problema en PrimeNG 14.1.2 agregando [virtualScroll]="true" al componente p-dropdown, y también agregando un ancho mínimo al panel desplegable con la propiedad [panelStyle]="{ 'min-width': 'min(100vw, 250px)' }"

Otra situación que puede estar causando esto es si estás usando appendTo="body" y el body tiene overflow: hidden o overflow-x: hidden pero tiene hijos que desbordan horizontalmente.

Si estás usando appendTo="body", intenta configurar el overflow en auto y verifica si tienes una barra de desplazamiento horizontal. Si la tienes, esto puede estar causando el problema. Para solucionarlo, o bien maneja los elementos hijos que desbordan, o establece overflow: hidden/overflow-x: hidden en un elemento hijo del body.