В настоящее время я изучаю JavaScript и создал код, позволяющий пользователю перетаскивать элемент. Однако этот код требует, чтобы в списке объектов было два объекта, тогда как я хочу, чтобы был только один. Я считаю, что проблема связана с использованием циклов for, которые начинаются с 0 и требуют, чтобы длина списка элементов была больше 0. Но из-за списков, начинающихся с индекса 0, этого не происходит. Мой код:

const list_items = document.querySelectorAll('.list-item');
const lists = document.querySelectorAll('.list');

let draggedItem = null;

for (let i = 0; i < list_items.length; i++) {
const item = list_items[i];

item.addEventListener('dragstart', function () {
    draggedItem = item;
    setTimeout(function () {
        item.style.display = 'none';
    }, 0)
});

item.addEventListener('dragend', function () {
    setTimeout(function () {
        draggedItem.style.display = 'block';
        draggedItem = null;
    }, 0);
})

for (let j = 0; j < lists.length; j ++) {
    const list = lists[j];

    list.addEventListener('dragover', function (e) {
        e.preventDefault();
    });

    list.addEventListener('dragenter', function (e) {
        e.preventDefault();
    });


    list.addEventListener('drop', function (e) {
        console.log('drop');
        this.append(draggedItem);
    });
   }
}
0
Song879 21 Апр 2020 в 11:57
Почему list_items определяется как var, а lists определяется как const?
 – 
Lain
21 Апр 2020 в 12:07
Это было для моего собственного эксперимента, когда я пытался добавить один элемент в список.
 – 
Song879
21 Апр 2020 в 12:10

1 ответ

Просто идея, так что это может не сработать: вы пытались изменить свои циклы for с

(let j = 0; j < lists.length; j ++)

К

(let j = 0; j <= lists.length; j ++)

<= в JS меньше или равно

0
Lebster 21 Апр 2020 в 12:07
И сделайте то же самое с 1-м циклом for
 – 
Lebster
21 Апр 2020 в 12:07
Это вызовет ошибку при попытке доступа к lists[j].
 – 
DBS
21 Апр 2020 в 12:08
Длина обычно больше, чем индекс, чтобы индекс начинался с 0, а длина начиналась с 1. Таким образом, < является правильным.
 – 
Lain
21 Апр 2020 в 12:08
Я только что попробовал это, и он возвращает ошибки типа со списком.
 – 
Song879
21 Апр 2020 в 12:11