jQuery UI Sortable-ошибка: не удается вызвать методы на sortable до инициализации; попытка вызвать метод "disable"



У меня есть сортируемый элемент списка jQuery UI, который заполняется динамически из запроса Ajax.

В настоящее время рабочий процесс идет

  1. пользователь нажимает кнопку, Список заполняется и сортируется по заданным настройкам.
  2. пользователь нажимает другую кнопку,
    1. существующие элементы списка <li> стираются вызовом jQuery.empty()
    2. новые значения данных вставляются в новые элементы списка <li> и добавляются в список <ul>
    3. сортируемый список обновляется через $("#сортируемый").сортируемый ("обновить");

Учитывая сортируемый объект списка $("#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?

124   1  

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);
  }
}
    Ничего не найдено.

Добавить ответ:
Отменить.