У нас есть список объектов, использующих jquery ui-sortable для пользовательского интерфейса, для реализации порядка перетаскивания для наших пользователей.
Я хотел добавить не перетаскиваемый ряд сверху и не допустить перетаскивания строк над ним. Используя примеры, которые я нашел здесь, я реализовал некоторые обработчики событий в конфигурации, начиная с beforeStop.
Моя проблема в том, что иногда я попадаю в обработчик события beforeStop, и ui.item.index () возвращает неправильный результат. Если вы перетащите вправо , ui.item.index () вернет 1, даже если он уронит его в слот 0. И вместо того, чтобы нажимать на 0 на единицу, кажется, что в списке выбирается, казалось бы, случайное место (хотя это может быть связано с задержкой рендеринга ui.placeholder).
Я нашел сообщения о том, что index () имеет значение 0 или 1 в зависимости от того, когда вы двигаетесь вверх или вниз. В этом случае я всегда перетаскиваю вверх с отключенным маркером на 0-м элементе. Похоже, это всегда должно быть на основе 0.
Я не нашел ни одной статьи об index (), но все же неправильно понял. Есть идеи?
Это мои обработчики:
beforeStop: function (ev, ui)
{ // beforeStop apparently is not reliable for cancel, so leave some state for stop
if (ui.item.index() == 0) // sometimes returns the wrong number
ui.item.badmove = true;
},
stop: function(ev, ui)
{
if (ui.item.badmove)
$(this).sortable("cancel");
},