Verhindern, dass Listenelement in JqueryUI sortierbar ist
Lesezeit: 3 Minuten
Benutzer1038814
Ich habe zwei Listen #sortable1 und #sortable 2 die verbundene Sortables sind, wie hier gezeigt Beispiel.
Sie können Listenelemente per Drag-and-Drop verschieben sortable1 zu sortable 2. Wenn jedoch ein Artikel in sortierbar 1 die Klasse “Nummer” enthält, möchte ich verhindern der Tropfen auf Sortierbar2 und so das gezogene Element wieder hineinfallen lassen sortierbar 1.
Ich habe Folgendes auf sortable2 verwendet:
receive: function (event, ui) {
if ($(ui.item).hasClass("number")) {
$(ui.item).remove();
}
aber es löscht das Listenelement aus beiden Tabellen insgesamt. Jede Hilfe wird geschätzt.
TJ
Für jeden, der dies in Zukunft liest, wird, wie von Briansol in Kommentaren für die akzeptierte Antwort erwähnt, ein Fehler ausgegeben
Uncaught TypeError: Cannot read property 'removeChild' of null
Bricht eine Änderung an der aktuellen Sortierung ab und setzt sie auf den Zustand vor dem Start der aktuellen Sortierung zurück. Nützlich in der Pause und erhalten Callback-Funktionen.
Das Abbrechen der Sortierung während anderer Ereignisse ist unzuverlässig. Verwenden Sie daher besser die receive Ereignis wie in Mj Azanis Antwort gezeigt oder verwenden Sie die stop Veranstaltung wie folgt:
Sie können eine Kombination aus den verwenden stop und sortable('cancel') Methoden zur Validierung des verschobenen Elements. Im dieses Beispielwenn ein Gegenstand abgelegt wird, überprüfe ich, ob der Gegenstand gültig ist, indem ich:
Überprüfen, ob das Element die Klasse hat number
und Überprüfen, ob das Listenelement abgelegt wurde list2
Dies ist etwas fester codiert, als ich möchte. Alternativ können Sie also das übergeordnete Element des abgelegten Elements überprüfen this, um zu prüfen, ob die Listen unterschiedlich sind. Dies bedeutet, dass Sie möglicherweise einen Artikel von haben könnten number in list1 und list2aber sie sind nicht austauschbar.
Mit dieser Methode scheine ich JS-Fehler zu bekommen. Ich habe einen Fehlerbericht auf der jQUI-Site aktualisiert, der möglicherweise damit zusammenhängt. bugs.jqueryui.com/ticket/4904?cnum_edit=9#comment:9
– BReal14
7. März 2014 um 19:10 Uhr
Stornieren ist nur zuverlässig in der stop und receive Ereignisse wie in dieser anderen Antwort erwähnt
– NDM
20. August 2015 um 10:47 Uhr
this.sortable hat bei mir nicht funktioniert, aber beim Wechsel zu ui.sender.sortable(“cancel”); id funktioniert einwandfrei
– Mimouni
26. Mai 2016 um 9:12 Uhr
Fehlermeldung: Uncaught TypeError: Eigenschaft „removeChild“ von null kann nicht gelesen werden. Es bricht das sortierbare …
– Lönix
21. März 2017 um 4:49 Uhr
@Mr.Jo Ich habe das obige Beispiel aktualisiert, um den Fehler hoffentlich zu beheben.
Nach ein paar Experimenten habe ich festgestellt, dass die bei weitem einfachste Methode die Verwendung des remove-Ereignisses ist, das im Wesentlichen nur ausgelöst wird, wenn Sie versuchen, ein Element in eine neue sortierbare Datei zu verschieben (die zuvor mit connectWith als Ziel verfügbar gemacht wurde).
Fügen Sie dies einfach zu Ihrem sortierbaren Aufruf hinzu:
Wenn Sie die Elemente mit der Klasse “Nummer” überhaupt nicht ziehen können müssen, können Sie die gesamte Drag-and-Drop-Funktionalität auch auf Elemente beschränken, die nicht die Klasse “Nummer” haben:
Wenn Sie a) nur diese 2 Listen haben und b) es Ihnen egal ist, dass Ihre “Nummer” tatsächlich gezogen wird und dann zurückfällt, können Sie einfach verhindern, dass sie dadurch gezogen wird: