Показать сообщение отдельно
  #11 (permalink)  
Старый 28.02.2015, 06:22
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

надеюсь, не криво

Ну так это проверить не сложно. Для этого нужно обязать alert показывать не лозунги, а результат действа:

if(arrayCheck(e, itemsList)) {
    itemsList.splice(e, 1);
    alert(itemsList.length);
} else {
    itemsList.push(e);
    alert(itemsList.length);
}


Пощелкаем по объектам в этом случае, и что наблюдаем? Чтобы понять "почему", нужно вспомнить, что метод splice() первым аргументом принимает индекс первого удаляемого/замещаемого элемента массива, а вы передаете в него объект.

Функция проверки наличия объекта в массиве должна возвращать не просто его наличие в массиве, но и индекс его в нем:

function arrayCheck(value, array) {
    for(var i = 0, k = array.length; i < k; i++) if(array[i] == value) return i;
    return -1;
}


А код добавить/удалить должен быть таким:

if(e.className == 'item') {
    if((i = arrayCheck(e, itemsList)) > -1) {
        itemsList.splice(i, 1);
        alert(itemsList.length);
    } else {
        itemsList.push(e);
        alert(itemsList.length);
    }
    break;
}

Последний раз редактировалось laimas, 28.02.2015 в 06:24.
Ответить с цитированием