jQuery UI Sortable-ошибка: не удается вызвать методы на sortable до инициализации; попытка вызвать метод "disable"
У меня есть сортируемый элемент списка jQuery UI, который заполняется динамически из запроса Ajax.
В настоящее время рабочий процесс идет
- пользователь нажимает кнопку, Список заполняется и сортируется по заданным настройкам.
- пользователь нажимает другую кнопку,
- существующие элементы списка
<li>стираются вызовомjQuery.empty() - новые значения данных вставляются в новые элементы списка
<li>и добавляются в список<ul> - сортируемый список обновляется через $("#сортируемый").сортируемый ("обновить");
- существующие элементы списка
Учитывая сортируемый объект списка $("#avail_list").sortable( ... );, я хочу, чтобы свойство определенных элементов списка draggable было отключено и непрозрачность была установлена на 0,5 на основе существующих значений в других элементах.
Для этого у меня есть следующая функция:
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);
}
}
Однако это приводит к ошибке
Error: cannot call methods on sortable prior to initialization;
attempted to call method 'disable'
Поскольку я вызвал refresh в сортируемом списке до отключения элементов, как можно не инициализировать объект sortable?
1 ответ:
Вызов a .sortable () на любом элементе делает дочерние элементы этого элемента сортируемыми. Это не означает, что дети также инициализируются с помощью .сортируемый(). Они просто часть сортируемого контейнера,который можно перетаскивать.
И раз уж вы звоните .сортируемый ('disable') на дочерних элементах, он выдаст ошибку, так как .сортировка () вызывалась на родителя, а не на детей. И способ, которым вы отключаете, также неверен.
Используйте отмените СВОЙСТВО , чтобы исключить эти элементы из сортировки. Добавьте эту опцию Везде, где вы инициализируете сортировку.
$("#avail_list").sortable({ cancel: ".disable-sort" });И добавьте этот класс к тем элементам, которые вы хотите отключить.
function disableDraggable(elements){ for (var i = 0; i < elements.length; i++) { $("#" + elements[i]).addClass("disable-sort"); $("#" + elements[i]).fadeTo("fast", 0.5); } }
Comments