Почему не удаляется класс по клику?

177
31 декабря 2019, 13:20

По клику на мою цель в консоли выводится сообщение, значит делегирование правильно работает, но тогда почему не удаляется класс?

<section class="drop-icons">
    <ul class="icon">
        <li><!-- close по нему должен происходить -->
            <a href="#">Contact us</a>
        </li>
        <li>
            <a href="#">Whatsapp</a>
        </li>
        <li>
            <a href="#">Telegram</a>
        </li>
        <li>
            <a href="#">Позвонить</a>
        </li>
    </ul>
</section>

JS

icon = document.querySelector('.icon');
    icon.onclick = function(){
        icon.classList.add('change');
    }
close_icon = document.querySelector('.icon > li:nth-of-type(1)');
    close_icon.onclick = function(event){
        let e = event.target;
        if(e != close_icon) return;
        icon.classList.remove('change');
            console.log('y')
    }
Answer 1

У Вас 2 слушателя и оба срабатывают, причем второй тот, который висит на внешнем элементе event.stopPropagation() спасет отца русской демократии, этот вызов отменяет дальнейшую обработку этого события

Так же поможет указать 3 агрумент false при добавлении слушателя через addEventListener

let icon = document.querySelector('.icon'); 
icon.onclick = function(){ 
    icon.classList.add('change'); 
} 
 
let close_icon = document.querySelector('.icon > li:nth-of-type(1)'); 
close_icon.onclick = function(event){ 
    let e = event.target; 
    icon.classList.remove('change'); 
    event.stopPropagation() 
 
}
.change { 
border: solid 
}
<section class="drop-icons"> 
    <ul class="icon"> 
        <li><!-- close по нему должен происходить --> 
            <a >Contact us</a> 
        </li> 
        <li> 
            <a >Whatsapp</a> 
        </li> 
        <li> 
            <a>Telegram</a> 
        </li> 
        <li> 
            <a >Позвонить</a> 
        </li> 
    </ul> 
</section>

Answer 2

Потому что e в if (e != close_icon) return; - это элемент а, а не li.

READ ALSO
mysql 8.0.15 (only innodb) Утечка ОЗУ?

mysql 8.0.15 (only innodb) Утечка ОЗУ?

После перехода с mysql 57 на mysql 8

177
Выборка из MySql в диапазоне дат

Выборка из MySql в диапазоне дат

есть таблица в формате

164
MySQL выбор кодировки

MySQL выбор кодировки

Всем привет, написал парсер для телеграм, который парсит информацию о каналах и все сообщения в нихСначала у меня была кодировка utf8general_ci

214
несколько carousel Bootstrap на странице

несколько carousel Bootstrap на странице

На странице есть 2 слайдера на чистом бутстрапе (без изменения js и прочего)Нужно чтобы оба слайдера перелистывались одновременно

197