Подтвердить что ты не робот

Как получить доступ к идентификатору перетаскиваемого элемента, который распадается на сортируемый

Я использую библиотеки JQuery для реализации перетаскивания.

Как мне получить элемент, который перетаскивается при его удалении в отсортированный список?

Я хочу, чтобы идентификатор div был вытащен. Следующий элемент перетаскивается:

<div class="control" id="control[1]" >
  <img src="img/controls/textfield.png" />
</div>

У меня есть стандартная функция перетаскивания из их примера

$(".control").draggable({
  connectToSortable: '#sortable',
  helper: 'clone'
});

остановка функции в разделе перетаскивания со следующим кодом возвращает правильное значение

stop: function(event, ui) {
  alert(ui.helper.attr('id'));
}

И это сортируемый элемент:

<ul id="sortable"><li>test</li></ul>

и его функции:

$("#sortable").sortable({
  revert: true,
  accept: '.control',
  receive: function(event, ui) { 
    // here i need to get draggable element id
  }
});

Я пробовал различные ui.id и т.д., которые, похоже, не работают.

receive: function(event, ui) { 
  $(ui.draggable).attr("id")
}

throws undefined.


Обновление

Извините, моя вина:) Как говорила моя мама - "Прочитайте API до кодирования". ui.item.attr('id') работает нормально.

4b9b3361

Ответ 1

Try

receive: function(event, ui) { 
  $(ui.item).attr("id")
}

Согласно документации, получение (действительно, все обратные вызовы для сортировки) получает два аргумента. Второй аргумент должен содержать:

  • ui.helper - текущий помощник элемент (чаще всего клон пункт)
  • ui.position - текущая позиция помощник
  • ui.offset - текущая абсолютная позиция помощника
  • ui.item - текущий перемещенный элемент
  • ui.placeholder - заполнитель (если вы определили один)
  • ui.sender - сортируемый, где вещь возникает (существует только если вы перейдите из одного подключенного списка в другой)

Ответ 2

Кажется, что context из ui.item изменяется между событием beforeStop и событием receive.

В моем случае я пытаюсь установить идентификатор элемента в сгенерированное значение и

receive: function (event, ui) { ui.item.attr("id", "control" + currentControlId++);}

не работает для меня

Итак, вы можете обойти это:

beforeStop: function (event, ui) { itemContext = ui.item.context;},
receive: function (event, ui) { $(itemContext).attr("id", "control" + currentControlId++);}

Ответ 3

У меня была аналогичная проблема, и у меня возникли проблемы с доступом к вспомогательному элементу в стартовом событии. То, что я закончил, это установить атрибут helper для функции, которая возвращает некоторый пользовательский HTML. Я смог получить доступ к этому HTML в стартовом мероприятии без каких-либо проблем.

helper: function() {
    return '<div id="myHelper">This is my custom helper.</div>';
}

Ответ 4

Из jQuery UI перетаскиваемые документы:

Если вы хотите не просто перетаскивать, но drag-and-drop, см. интерфейс jQuery Плагин Droppable, который обеспечивает drop для перетаскиваемых объектов.

См. http://docs.jquery.com/UI/API/1.7/Droppable

Ответ 5

Да, эта проблема при смешивании сортировок перетаскивает droppables и т.д. Сделать сортируемый контейнер также недоступным:

$("#sortable").sortable({
  revert: true,
  accept: '.control',
  receive: function(event, ui) { 
    // here i need to get draggable element id
  }
});

$('#sortable').droppable({
    accept: '.control',
    drop: function(e, ui){
        var your_draggable_element = $(ui.draggable);
        var your_helper = $(ui.helper);
    }
});

который должен работать

Ответ 6

У меня был успех с использованием события beforeStop для сортировки.

Из здесь

beforeStop: это событие запускается, когда сортировка останавливается, но когда добавлен placeholder/helper.

$( "#something" ).sortable({
  beforeStop: function(event, ui) {
     //you should check if ui.item is indeed the one you want!
     item_id = $(ui.item).attr('id');
     $(ui.item).html('I'm changing the dropped element in the sortable!');
  }
});

Ответ 7

Кажется немного взломанным - но это удалось! Я должен использовать $('. Dragrow1 li: last')

Ответ 8

Вы можете использовать атрибут пользовательских данных для хранения идентификатора перетаскиваемых элементов. Этот атрибут по-прежнему присутствует на выпавших элементах. Исходный код:

<div class="..." data-id="item_id">
    ...
</div>

Используя $('dropped item").data('id') в сортировке, чтобы получить идентификатор:

$("#sortable").sortable({
  ...,
  receive: function(e, ui) { 
      var id = ui.item.data('id');
  }
});

Ответ 9

$( "#sortable1" ).sortable({
  connectWith: ".connectedSortable",
  cancel: ".disabledItem",
  items: "li:not(.disabledItem)",
  receive: function(event,ui){

  **var page = ui.item.attr('value');**

  var user = $("#select_users").val();