При перетаскивании drag1 на drop1 должен появиться arr3[0]-CAT, при перетаскивании drag2 на drop2 должен появиться arr3[1]-DOG, при перетаскивании drag3 на drop3 должен появиться arr3[2]-BERD. На данный момент появляется только arr3[2]-BERD, причем сразу и неважно какой drag был перемещен. Как исправить ошибку?
// Ну вар-ы уже многие годы не используются, да и название переменной должно
// нести смысловую нагрузку
const ANIMALS = ["CAT", "DOG", "BERD"];
// var drag = "#drag"; неиспользуемая перемення
// var a = String(i);
// var b = "#drag" + a; - здесь будет автоматическое приведение к строке, выше строка не имеет смысла
// Циклы можно и простить через .forEach / .map
ANIMALS.map((name, index) => {
initDroppable({
name: name,
elDrag: $(`#drag${index}`),
elDrop: $(`#drop${index}`),
})
})
// Внутренности надо выносить, что бы избегать вложенности и проблем с
// пониманием и расширяемосью в будущем
const initDroppable = ({ elDrag, elDrop, name }) => {
elDrag.draggable(700);
elDrop.droppable(
{ accept: elDrag.selector, hoverClass: "drags" },
{
drop: function (e, ui) {
$(this).html(ui.draggable.remove().html());
$(this).droppable("destroy");
$(this).addClass("ui-state-highlight");
if (elDrag) { // Здесь по идее всегда true так как элементы существуют
elDrop.html(name);
}
},
}
);
};
// К сожаления у меня нет ответа, работает ли выше мною написанное, так как
// давно не работал с jQ UI, я только упроситил код что бы было понятнее.
// На сколько я понял вы на этот пример с оф. документации ориентируетесь:
// https://jqueryui.com/droppable/#visual-feedback
const initDragDrop = ({ elDrag, elDrop, name }) => {
elDrag.draggable();
elDrop.droppable({
classes: {
"ui-droppable-active": "ui-state-default",
},
drop: function (event, ui) {
$(this).html(ui.draggable.remove().html());
$(this).addClass("ui-state-highlight");
elDrop.html(name);
},
});
}
$(function () {
ANIMALS.map((name, index) => {
initDragDrop({
name: name,
elDrag: $(`#drag${index}`),
elDrop: $(`#drop${index}`),
});
});
});