2010-07-31 15 views
22

Mi problema: El evento ordenable: se dispara cuando arrastro algo en la lista o cuando ordeno la lista. Pero solo quiero iniciar la función cuando arrastro un elemento.Jquery ordenable, eliminar elemento actual arrastrando

Mi código

 $(document).ready(function ust() 
     {  
      $('#div1').sortable({ 
       out: function(event, ui) { $('#nfo').append('OUT<br />'); } 
      }); 

     }); 

Ejemplo de trabajo http://jsfiddle.net/FrbW8/22/

+0

Hmm, ¿esto es un error de Jquery? Coz ... Out -> Este evento se desencadena cuando un elemento ordenable se aleja de una lista conectada. Inicio -> Este evento se activa cuando se inicia la ordenación. Detener -> Este evento se desencadena cuando se detiene la ordenación. – Peter

+2

+1 para jsFiddle –

+3

Blair: Es la excusa más estúpida que he visto hasta ahora en SO. – Christian

Respuesta

4

Este es el comportamiento por defecto de la devolución de llamada a cabo. Ver este jquery ui trac ticket

Realmente no estoy de acuerdo con la noción de comportamiento "lógico".

"Sin embargo, tenga en cuenta que la 'salida' de devolución de llamada se seguirán activándose si arrastra en una lista y luego soltar el ratón (pero no si no está sobre la lista). Esto es comportamiento lógico y sucede para sortables normales también ".

+0

¿es posible detener el fuego? Por ejemplo, agrego sortstart y sortstop. -> Si es así: -> abbort out: ... si está en la cima: -> abbort out: – Peter

+0

Eso se pondrá complicado, creo. Podría tratar de ensuciarse las manos y cambiar el jquery ui src para detener este comportamiento 'fuera'. – redsquare

+0

Hey redsquare, pero cuando cambio el src, debo cambiarlo después de cada actualización de ui. :( ¿verdad? – Peter

33

Uso beforeStop para interceptar el elemento y eliminarla:

receive: function(e, ui) { sortableIn = 1; }, 
over: function(e, ui) { sortableIn = 1; }, 
out: function(e, ui) { sortableIn = 0; }, 
beforeStop: function(e, ui) { 
    if (sortableIn == 0) { 
     ui.item.remove(); 
    } 
} 

(Originalmente había encontrado esto en el Google, pero ya no se puede encontrar el enlace lo tanto, me disculpo por no hacer referencia a la fuente..)

+3

Aquí está el enlace: http: //forum.jquery.com/topic/drag-item-out-of-a-sortable – lo5

+0

Parece que esto impide la clasificación normal de los elementos. Si utilizo esto y arrastro los elementos para ordenar, incluso si nunca se mueve fuera del control, si quita el artículo. –

3

Las otras soluciones no parecen funcionar con listas ordenables conectadas, así que estoy publicando mi propia solución que funciona perfectamente para mi caso. Esto hace uso del complemento "droppable" que captura el evento "drop" cuando los elementos se descartan fuera de las listas clasificables.

$('#div1').sortable({ 
    .... 
}).droppable({greedy: true}) 

$('body').droppable({ 
    drop: function (event, ui) {   
     ui.draggable.remove(); 
    } 
}); 

Aquí es una jsFiddle de este enfoque en la acción: http://jsfiddle.net/n3pjL/

+0

Ese es un enfoque que probé hoy sin éxito, porque no encontré la opción 'codicioso'. ¡Gracias por la pista! – Tsunamis

1

utilizo this.element.find('.ui-sortable-helper').length para hacer diferencia entre "resolver evento" y "abandonar evento". Cuando está ordenando, el elemento ordenado tiene clase ui-sortable-helper. Después de soltar, no hay otra clase de ordenación posible hasta que comiences a ordenar de nuevo (al menos en mi secuencia de comandos). Espero ayudar a alguien

Cuestiones relacionadas