2012-08-30 19 views
13

Tengo un extraño problema con jQuery que se puede arrastrar esta mañana, me pregunto si alguien más se ha encontrado con esto.conjuntos arrastrables jQueryUI "posición: relativa" en mis divisores arrastrables

Tengo muchas pequeñas divisiones dentro de una div grande. Están absolutamente posicionados: "posición: absoluta" en CSS para su clase, con la posición real calculada y configurada en JS on demand.

Ahora estoy agregando funcionalidad para permitir que estos divs sean arrastrables.

Pero, tan pronto como hago un arrastrable, se le da "posición: relativa" directamente en el elemento, que como se puede imaginar, arruina seriamente la posición en pantalla.

¿Alguien sabe por qué cambia la "posición" de esta manera o cómo decir que no?

EDIT:

Sólo se dio cuenta de que hay una respuesta bastante obvia mirándome a la cara - importante en mi posición: absoluta! Esto parece arreglarlo. PERO sigo interesado si alguien sabe por qué establece "posición: relativa" de esta manera (y no lo hace configurable o verifica primero si necesita posición) ... Me pregunto qué problemas acabo de almacenar para mí ;-)

+1

¿Qué versión estás usando? ¿Y cómo lo estás inicializando? Draggable admite posicionamiento absoluto y relativo. Comprobando dos veces el código, de manera predeterminada, la única razón por la que debe establecerse en relativo es si no se establece ningún tipo de posición en el elemento. – Nal

+0

Cheers Nal. Estoy usando 1.7.2. La posición se establece en la clase, no en el elemento, y sin el elemento que se puede arrastrar, puedo ver en el depurador de Chrome que se calculó "posición: absoluta". Y funciona. Cuando aplico el arrastrable a él, "position: relative" se aplica al elemento directamente. Esto puede ser un error jquery, donde debería estar usando getComputedStyle para encontrar la posición. –

+0

Esa es una versión realmente antigua. Probablemente deberías actualizar a 1.8 y ver si eso hace la diferencia. ¿Estás utilizando la opción 'helper' draggable o alguna otra opción? Pero aún así, la única línea donde position: relative está establecida es [aquí] (https: // github.com/jquery/jquery-ui/blob/1.7/ui/ui.draggable.js # L19) – Nal

Respuesta

0

También me pasó a mí, pero solo en Chrome. ¿Razón?

Era como este:

$("#div-popup").draggable({ handle: ".top", containment: 'document'}); 

Entonces eliminó el parámetro contención, como este:

$("#div-popup").draggable({ handle: ".top"}); 

Así que es sobre el navegador (Chrome en este caso), que establece la posición Relativo cuando especifica qué contención el elemento será arrastrable.

11

"me encontré con el mismo problema hoy en día. La razón era que estaba aplicando draggable() en un elemento creado de forma dinámica. Estaba 'más tarde' Al añadir a dom. El elemento debe estar en dom cuando se aplica draggable() (si el estilo es siendo aplicado por una clase). En resumen, cuando no encuentra ninguna posición adjunta con el element, agrega relative. " - Jashwant

abetos hacer: .append(jElement) continuación: jElement.draggable()

Por alguna razón Jashwant puso su respuesta en el comentario a la pregunta. Así que pensé que sería conveniente para otros publicarlo aquí.

Cuestiones relacionadas