RESOLVEDziehbar Element Make sortierbar innerhalb abwerfbaren mit jQuery UI
So studierte ich sortable()
mit den connectWith
Attribute ein bisschen mehr und fand die Lösung einfacher war als ich erwartet hatte, aber ich war darüber Art von rückwärts zu denken, weil von draggable()
und droppable()
.
Hier ist die Geige: http://jsfiddle.net/DKBU9/12/
Original Frage folgt:
Dies ist eine Erweiterung einer früheren SO Frage, die ich fühlte getrennt gehalten werden sollte.
Die ursprüngliche Frage ist hier: jQuery UI - Clone droppable/sortable list after drop event. Es betrachtet die Reinitialisierung des Drop-Handlers auf geklonte Elemente.
Obendrein versuche ich, die Elemente, die aus der ursprünglichen Liste gezogen wurden, in den Dropdown-Listen zu sortieren. Hier
ist eine Geige im Wesentlichen das aktuelle Verhalten als Ergebnis der ursprünglichen Frage darstellt: http://jsfiddle.net/DKBU9/7/
und den erforderlichen Code, weil so mag diese Stellen beschweren und aufblasen:
HTML
<ul id="draggables">
<li>foo1</li>
<li>foo2</li>
<li>foo3</li>
</ul>
<ul class="droppable new">
</ul>
JS
$(function() {
$('#draggables > li').draggable({
appendTo: 'document',
revert: 'invalid'
});
$('.droppable > li').draggable({
appendTo: 'document',
revert: 'invalid'
});
$('#draggables').droppable({
accept: '.droppable > li',
drop: function(event, ui) {
ui.draggable.detach().css({top: 0,left: 0}).appendTo($(this));
cleanUp();
}
});
initDrop($('.droppable'));
});
function initDrop($element) {
$element.droppable({
accept: function(event, ui) {
return true;
},
drop: function(event, ui) {
if($(this).hasClass('new')) {
var clone = $(this).clone();
$(this).after(clone);
$(this).removeClass('new');
initDrop(clone);
}
ui.draggable.detach().css({top: 0,left: 0}).appendTo($(this));
cleanUp();
}
}).sortable({
items: 'li',
revert: false,
update: function() {
cleanUp();
}
});
}
function cleanUp() {
$('.droppable').not('.new').each(function() {
if($(this).find('li').length == 0) {
$(this).remove();
}
});
}
Referenzfrage: Jquery UI combine sortable and draggable
Ich habe versucht, diese SO-Frage zu verwenden, um mein Problem zu lösen, da das Ergebnis genau das ist, was ich erreichen möchte, insbesondere die letzte Geige in den Kommentaren der angenommenen Antwort Ich kann mir nicht vorstellen, wie ich es angesichts der kleinen Unterschiede an meinen Code anpassen kann. Zum Beispiel klont die Geige in dieser Frage das Ziehbare, anstatt das eigentliche Element zu ziehen, und im Gegensatz zu meinem erlaubt es nicht, Elemente in die Anfangsliste zurück zu ziehen.
Also jede Hilfe zu versuchen, dieses Ergebnis für meinen Code zu erhalten würde sehr geschätzt werden.
Auch in diesem Beispiel wird das Attribut accept
als eine Funktion gesetzt, die true zurückgibt. Was ist der Grund dafür? Bedeutet das nicht, dass es irgendetwas oder irgendein ziehbares Element akzeptieren wird?
EDIT: Ich las ein paar Antworten, die nur sortierbar() mit dem connectWith-Attribut verwendet, aber aus irgendeinem Grund habe ich nicht gedacht, was ich getan habe, teilweise weil ich nicht wollte, dass die erste Liste sein sortierbar. Die Verwendung von sortable() allein scheint jedoch die Funktionalität zu erhalten, nach der ich gesucht habe, aber ich habe noch nicht alle Event-Handler angepasst.
Meine Antwort wird erlauben, dass die ursprüngliche Liste nicht sortiert werden kann wie bei Ihrer Bearbeitung, aber wenn Sie damit einverstanden sind, dass sie sortierbar ist, dann sollten Sie mit Ihrer gehen, da es einfacher ist. – acarlon
Ja, ich schätze deine Zeit und deinen Einsatz sehr, aber ich werde dabei bleiben, da es nicht wirklich eine große Sache ist, dass die anfängliche Liste sortierbar ist. – Bobe