2011-02-27 13 views
21

Un caso puede ordenar absolutamente común:Cancelar arrastrando de un elemento puede ordenar

<script> 
$(function() { 
    $("#sortable").sortable(); 
}); 
</script> 

<ul id="sortable"> 
    <li>Item 1</li> 
    <li>Item 2</li> 
    <li>Item 3</li> 
</ul> 

problema. necesidad de cancelar el arrastre de un elemento en una cierta condición y hay un buen consejo de Andrew Whitaker, pero que el enfoque está trabajando sólo para jquery-ui-arrastrable y falla por sortables:

$("#sortable").sortable({ 
    start: function() { 
    return false; // will still cause `this.helper is null` 
    } 
}); 

Will be greateful para sugerencias.

Respuesta

13

La función de devolución de llamada sort hace lo mismo para la especie como de arrastre para arrastrable (demo):

$("#sortable").sortable({ 
    sort: function() { 
     if ($(this).hasClass("cancel")) { 
      $(this).sortable("cancel"); 
     } 
    } 
}); 
+0

gracias, chapuza! funciona – mcmlxxxiii

+23

Esto arroja un error: "TypeError no detectado: no se puede leer la propiedad '0' de nulo" –

+0

http://stackoverflow.com/questions/18470835/jquery-sortable-cancel-event-if-not-valid –

26

Sortable tiene una capacidad de "cancelar" invoca mediante sortable('cancel').

De los documentos: "Cancela un cambio en la clasificación actual y la revierte al estado anterior a cuando se inició la clasificación actual". Ver http://api.jqueryui.com/sortable/#method-cancel.

uso

Ejemplo:

$("#sortable").sortable({ 
    stop: function(e, ui) { 
    if ("I need to cancel this") { 
     $(ui.sender).sortable('cancel'); 
    } 
    } 
}); 
+7

'ui .sender' no se puede usar aquí ya que 'sender' es el orden del que proviene el elemento si se mueve de un ordenable a otro (http://api.jqueryui.com/sortable/#event-stop). Si desea esa clasificación simple use '$ (this) .sortable ('cancel')' – Odys

+1

@Odys muchas gracias por agregar que –

17

Volviendo false como fudgey sugiere funciona muy bien para hacer las cosas de forma dinámica unsortable, pero también hay un cancel option en la configuración se puede ordenar lo que le permite administrar la unsortables estáticas así:

$("#sortable").sortable({ 
    // this prevents all buttons, form fields, and elemens 
    // with the "unsortable" class from being dragged 
    cancel: ":input, button, .unsortable" 
}); 
+0

Tenga en cuenta que cualquier ordenado anidado debajo de los elementos que tienen la clase cancelar CSS aplicada a ellos (por ejemplo, dentro de las vistas anidadas de árbol) también se deshabilitará para ordenar incluso si no tienen aplicada esa clase. – Jason

6

Trate this example

 
$('#list1').sortable({ 
    connectWith: 'ul' 
});  

$('#list2').sortable({ 
    connectWith: 'ul', 
    receive: function(ev, ui) { 
     if(ui.item.hasClass("number")) 
      ui.sender.sortable("cancel"); 
    } 
}); 
+0

super increíble ... tardó medio día y al final del día la respuesta está aquí – Fury

+0

Gran implementación, basada en el nombre de clase tal como lo necesitaba. – Aries51

Cuestiones relacionadas