jQuery UI Sortable - - Error: kann nicht zum aufrufen von Methoden auf sortierbare vor initialization; attempted to call method 'disable'
Ich habe ein jQuery-UI-Sortable element in der Liste wird dynamisch gefüllt, die aus einem Ajax-request.
Derzeit ist der workflow geht
- Benutzer klickt auf Schaltfläche Liste wird gefüllt und sortiert nach den angegebenen Einstellungen.
- Benutzer klickt auf einen anderen button,
- Vorhandene Liste
<li>
Elemente werden gelöscht, indemjQuery.empty()
nennen - Neue Daten einfügen von Werten in neue
<li>
Liste der Elemente und an<ul>
Liste - Sortierbare Liste aktualisiert wird via $("#sortable").sortable("refresh");
- Vorhandene Liste
Gegeben eine Sortierbare Liste Objekt $("#avail_list").sortable( ... );
will ich haben Liste spezieller Elemente' draggable
Eigenschaft deaktiviert und die Deckkraft einstellen auf 0,5, basierend auf den vorhandenen Werten in andere Elemente.
Um dies zu tun, ich habe die folgende Funktion:
var disabled = [];
var appendString = ""
if (avail.length > 0) {
for (var i = 0; i < avail.length; i++) {
//check if current list element exists in existing value list. True results
//in grayed out and non-draggable element
compareMatch = checkMatch(avail[i], compare);
if (compareMatch)
disabled.push(list + "open_" + avail[i].id);
appendString += "<li id = "+ list + "open_" + avail[i].id +
" class = 'avail_list_element'><img class = 'logo' src = /static/images/vendor_logo/" + avail[i].icon + " /></li>"
}
$("#avail_list").append(appendString);
}
$("#avail_list").sortable("refresh");
if (disabled.length > 0)
disableDraggable(disabled);
function disableDraggable(elements){
for (var i = 0; i < elements.length; i++) {
console.log(elements[i])
$("#" + elements[i]).sortable("disable");
$("#" + elements[i]).fadeTo("fast", 0.5);
}
}
Allerdings führt dies zu einem Fehler
Error: cannot call methods on sortable prior to initialization;
attempted to call method 'disable'
Da rief ich refresh
auf die sortierbare Liste vor, um die Deaktivierung der Elemente, wie können die sortable
Objekt nicht initialisiert werden?
- Rufen Sie sortierbar auf
$("#avail_list")
, aber Ihre Elemente in array enthält so etwas wie$("#listopen_1")
obwohl ich bin mir nicht ganz sicher, weil ich nicht weiß, was dielist
variable gesetzt ist. Vielleicht versuchen Sie$("#" + elements[i]).sortable("refresh");
bevor Sie versuchen, Sie zu deaktivieren?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Berufung ein .sortable() auf jedem element die Kinder, die Elemente sortierbar. Das bedeutet nicht, dass die Kinder sich auch entsprechend mit der .sortable(). Sie sind nur ein Teil einer sortierbaren container verschoben werden.
Und da Sie anrufen .sortable('deaktivieren') auf die untergeordneten Elemente, es gibt einen Fehler, da die .sortable() aufgerufen wurde, auf die Eltern und nicht die Kinder. Und die Art, wie Sie zu deaktivieren ist auch falsch.
Nutzen Sie die cancel-Eigenschaft auszuschließen, werden jene Elemente, die sortiert wird. Fügen Sie diese option überall dort, wo Sie initialisieren Ihre sortierbar.
Und fügen Sie dieser Klasse diejenigen Elemente, die Sie deaktivieren möchten.