2009-12-18 8 views
8

Estoy creando un planificador de días usando jquery, arrastrable y desplegable.Jquery Draggable - ¿Cómo creo un nuevo div arrastrable sobre la marcha que luego se puede arrastrar?

Cuando se arrastra un trabajo de la columna no asignada a un intervalo de tiempo de una hora, se elimina el elemento original que se puede arrastrar y se coloca un nuevo div en la página con los detalles del trabajo.

Este bloque de código div recién creado, tiene todos los parámetros para que sea arrastrable. Cuando se procesa en la carga de la página, estos trabajos asignados se pueden arrastrar.

Es solo cuando se crean sobre la marcha utilizando javascript es algo que ocurre que evita que sea arrastrado.

Cuando creo estas nuevas etiquetas div sobre la marcha con Javascript, ¿hay algo que deba hacer para decirle al jquery que estos nuevos elementos están destinados a ser arrastrados?

(gracias de antemano como siempre)

Pasos

  • Tenemos un contenedor div con una lista de puestos de trabajo (más divs) en su interior. #unassignedjobs es el div principal para estos trabajos, con los siguientes trabajos dentro, #jobN, # jobN2, # jobN3
  • Tenemos otra área en la que podemos colocar estos elementos, y dentro de esta área hay un contenedor para mostrar trabajos, por persona, llamemos a estos # person1 y # person2.
  • La finalidad es arrastrar un trabajo de la lista de puestos de trabajo sin asignar, y colocarlo en las listas de personas de puestos de trabajo
  • Al minuto cuando hago esto, yo refrescar todo el HTML dentro de # person1 cuando una el elemento se descarta y usa ajax/php para rehacer la lista de trabajos para esta persona (# persona1) y repobla a # persona1 usando innerHTML.
  • Cada vez que se crea una página desde php, cualquier trabajo dentro de # persona1 está presente cuando jquery está activado, lo que los hace arrastrables. Es sólo cuando la actualización y la repoblación de la innerHTML es RAN son los artículos (#jobN o # jobN2) no puede ser arrastrado

    var = createdContent httpRequest.responseText;

    jobcolp.innerHTML = createdContent;

Afortunadamente esto hace que el problema sea un poco más claro.

Respuesta

4

basta con aplicar pueda arrastrar a la DIV de nueva creación. Si el DIV es exactamente el mismo, a excepción de la posición, tampoco podría volver a crearla, sino simplemente recolocarla. Esto retendría todos sus controladores.

// remove, reposition, reapply handlers 
$('#jobN').remove().appendTo('#dayViewN').draggable(); 

o

// reposition, retain handlers 
$('#jobN').appendTo('#dayViewN'); 
+0

Brillante, soy nuevo en jquery, pero déjame ver si lo he entendido bien. Tenemos un contenedor div llamado #unassignedjobs y dentro de este contenedor está #jobN que se puede arrastrar. Tengo otro contenedor div # persona1 que es donde quiero que #jobN se mueva. ¿El código anterior simplemente está moviendo #jobN fuera de #unassignedjobs y colocándolo en la # persona1? – Matt

+0

Sí, lo agrega como el último elemento en el contenedor # person1. – tvanfosson

2

En lugar de reemplazar el nuevo div, ¿por qué no desactivar el arrastrable?

$(element).draggable('disable'); 

Entonces, cuando usted quiere que sea alquilásemos que pueden arrastrarse, utilizar este

$(element).draggable('enable'); 
+0

El nuevo div es la posición absoluta, sentado dentro de una etiqueta div en posición relativa. Básicamente los trabajos se arrastran a las vistas del día de las personas. Por lo tanto, cuando se descarta un trabajo, se debe inyectar en un lugar específico del html. – Matt

+0

Hmm .. No creo entender lo que estás tratando de hacer. ¿Podrías atravesarlo con estilo de viñeta? – Gausie

+0

He agregado al hilo principal, ¿esto lo hace más claro? P.S gracias por tomarse el tiempo. – Matt

Cuestiones relacionadas