Estoy usando este método http://jqueryui.com/demos/sortable/#connect-lists para conectar dos listas que tengo. Quiero ser capaz de arrastrar desde la lista A a la lista B, pero cuando se suelta, necesito mantener la original en la lista A. Revisé las opciones y los eventos, pero creo que no hay nada como eso. ¿Algún acercamiento?¿Cómo se duplica el artículo cuando se usa jquery ordenable?
Respuesta
Para empezar, have a look at this, y lea la respuesta de @Erez, también.
$(function() {
$("#sortable1").sortable({
connectWith: ".connectedSortable",
remove: function (event, ui) {
ui.item.clone().appendTo('#sortable2');
$(this).sortable('cancel');
}
}).disableSelection();
$("#sortable2").sortable({
connectWith: ".connectedSortable"
}).disableSelection();
});
La desventaja de este enfoque es que no se conserva el orden de $ ('# sortable2'). Ex. si coloca un elemento en $ ('# sortable2') en la parte superior de la lista, esta solución mostrará el artículo caído en la parte inferior de la lista. La respuesta de Erez a continuación conserva la posición descartada y fue una solución mejor en mi caso de uso. –
$("#sortable1").sortable({
connectWith: ".connectedSortable",
forcePlaceholderSize: false,
helper: function (e, li) {
copyHelper = li.clone().insertAfter(li);
return li.clone();
},
stop: function() {
copyHelper && copyHelper.remove();
}
});
$(".connectedSortable").sortable({
receive: function (e, ui) {
copyHelper = null;
}
});
Este enfoque es preferible a Thorsten ya que este conserva el orden de la lista original. –
¡Funciona a la perfección! Esto realmente debería marcarse como la respuesta correcta. –
Respuesta mucho mejor que la marcada como correcta. Esto copia y conserva el orden. – jkinz
solución de Erez' funciona para mí, pero he encontrado su falta de encapsulación frustrante. Me propongo utilizar la siguiente solución para evitar el uso de variables globales:
$("#sortable1").sortable({
connectWith: ".connectedSortable",
helper: function (e, li) {
this.copyHelper = li.clone().insertAfter(li);
$(this).data('copied', false);
return li.clone();
},
stop: function() {
var copied = $(this).data('copied');
if (!copied) {
this.copyHelper.remove();
}
this.copyHelper = null;
}
});
$("#sortable2").sortable({
receive: function (e, ui) {
ui.sender.data('copied', true);
}
});
Esto es un jsFiddle: http://jsfiddle.net/v265q/190/
El uso de un marcador de posición oculto en la primera lista le dará el rastro común del efecto de posición exacta, por ejemplo http://jsfiddle.net/BrianDillingham/v265q/320/ –
@BrianDillingham ¿Algún truco para que 'revert' funcione también? – JimmyBoh
Al utilizar la solución de Erez, pero para la conexión de 2 módulos de función se pueden ordenar (base era el código de ejemplo de portlets de http://jqueryui.com/sortable/#portlets) , el alternar en el clon no funcionaría. Agregué la siguiente línea antes de 'devolver li.clone();' para hacer que funcione
copyHelper.click(function() {
var icon = $(this);
icon.toggleClass("ui-icon-minusthick ui-icon-plusthick");
icon.closest(".portlet").find(".portlet-content").toggle();
});
Esto me tomó un tiempo para entenderlo, así que espero que ayude a alguien.
Sé que esto es viejo, pero no pude obtener la respuesta de Erez para trabajar, y Thorsten no lo cortó para el proyecto que lo necesito. Esto parece funcionar exactamente como lo necesito:
$("#sortable2, #sortable1").sortable({
connectWith: ".connectedSortable",
remove: function (e, li) {
copyHelper = li.item.clone().insertAfter(li.item);
$(this).sortable('cancel');
return li.clone();
}
}).disableSelection();
sí, esta solución es mejor porque usa li.item para que pueda usarse con múltiples elementos. Gracias, me ayudó. – themis
Esta es la mejor respuesta, gracias. –
La respuesta de abuser2582707 funciona mejor para mí. Excepto un error: Es necesario cambiar el regreso a
return li.item.clone();
lo que debe ser:
$("#sortable2, #sortable1").sortable({
connectWith: ".connectedSortable",
remove: function (e, li) {
li.item.clone().insertAfter(li.item);
$(this).sortable('cancel');
return li.item.clone();
}
}).disableSelection();
- 1. resultado extraño cuando se duplica restando
- 2. Codificación cartográfica cuando se usa Ajax? JQuery
- 3. ¿Cómo se usa `to_sql` en AREL cuando se usa` average() `?
- 4. Cómo deshabilitar Javascript cuando se usa Selenium?
- 5. ¿Cómo se usa jQuery (elementArray)?
- 6. ¿Cómo se duplica un archivo en XCode?
- 7. JQuery ordenable: ¿se ha solucionado el error en IE?
- 8. ¿Cómo se usa ZeroClipboard en jQuery?
- 9. ¿Cuándo/por qué prefijar variables con "$" cuando se usa jQuery?
- 10. ¿Cómo eliminar un artículo que se aleja de su lista?
- 11. dirección de jquery ¿cómo se usa?
- 12. ¿Por qué se abandona el sbt cuando se usa pescado?
- 13. ¿Cómo se maneja savedInstanceState cuando se usa ViewPager?
- 14. ¿Cómo se puede modificar "Modificado por" cuando se usa RunWithElevatedPrivileges?
- 15. ¿Cómo se evitan las funciones anidadas cuando se usa AJAX?
- 16. ¿Cómo se mapea la memoria cuando se usa la horquilla?
- 17. Jquery UI Clasificable - Obtiene el artículo siendo ordenado
- 18. Cómo recortar texto cuando se muestra un resumen del artículo?
- 19. ordenable y droppable, no se actualiza, cuando DOM lo hace?
- 20. "etiqueta no válida" cuando se usa JSONP?
- 21. Cómo arreglar el resaltado del anillo de enfoque cuando se recorta cuando se usa CALayer?
- 22. La lista ordenable de Jquery no se serializará, ¿por qué?
- 23. Cómo establecer el tipo de columna cuando se usa EPPlus
- 24. jQuery ordenable obtener 2 elementos que se intercambian
- 25. Mysql se unen y la suma se duplica resultado
- 26. jQuery UI Posición ordenable
- 27. jQuery + ordenable + en vivo
- 28. jQuery comportamiento ordenable inesperado
- 29. Cómo cambiar el cursor para esperar cuando se usa jQuery .load()
- 30. ¿Cómo se excluyen los campos de valor nulo cuando se usa Flexjson?
Buena odle cuestión. Tuve un momento difícil con los documentos sobre esto también. –
Tuve un momento difícil para encontrar una solución. Buena pregunta. –