Javascript не реагирует должным образом

У меня есть небольшая проблема, которую я даже не знаю, как объяснить. Главное, что у меня две кнопки, один из них - открыть форму редактирования:

Javascript не реагирует должным образом

И еще один для удаления и элемента:Javascript не реагирует должным образом

Теперь главный вопрос в том, что и как реагирует, когда я нажимаю и где я нажимаю. Всякий раз, когда я нажимаю кнопку для редактирования (как вы можете видеть, у нее есть немного отступов по бокам), js загружает нужную мне форму редактирования, тем самым вызывая функцию, которую я указал для запуска всякий раз, когда происходит щелчок в редактировании кнопка «пробел».

Всякий раз, и здесь возникает проблема, я нажимаю кнопку, чтобы удалить, и здесь я имею в виду, когда я нажимаю на корзину (сам элемент <img>), он абсолютно ничего не делает, хотя когда я перемещаю мышь за пределы синего прямоугольника (другими словами элемент <img>) и щелкнуть внутри области с отступом, ТОГДА щелчок вызывает функцию, которая мне нужна. Прежде всего, когда я щелкаю в «области заполнения», event.target по какой-то причине не определен.

Я не могу понять причину этого, спасибо за любую помощь.

Обновлено: добавлен JS-код по запросу:

document.addEventListener('click',function(e){
    e.preventDefault();    
    const eTarget = event.target;
    console.info(event.target);

    switch(true){
        case eTarget.classList.contains('close-edit'):
            editContentContainer.classList.toggle('show');
            break;
        case eTarget.classList.contains('add-data'):
        case eTarget.classList.contains('edit-data'):
        case eTarget.classList.contains('delete-data'):
            asyncCollectAndAction(eTarget.id);            
            break;
        case eTarget.classList.contains('add-new-flavour'):
            addNewFlavourToProduct(eTarget);
            break;
    }
});


const asyncCollectAndAction = (targetID) => {   
    /*
        Action type:
        1 - Insert/Add
        2 - Edit
        3 - Delete
    */ 
   console.info('target Id is: ', targetID);

    let collectedData = '';
    let formCollector = ''
    const categoryType = targetID.split('-')[0];
    const actionType = targetID.split('-')[1];
    console.info('action type is: ', actionType, typeof(actionType), actionType);

    if (actionType != 'delete' || actionType != "delete"){
        formCollector = document.querySelectorAll(`[data-category^=${targetID}`);
    }

}

Просто чтобы подкрепить то, что я имел в виду, всякий раз, когда я нажимаю кнопку для удаления (на самом элементе), щелчок регистрируется JS (console.info(event.target); выводит элемент, который я щелкнул), но не вызывает функцию asyncCollectAndAction(eTarget.id);. Всякий раз, когда я перемещаюсь за пределы элемента, но все еще внутри границы заполнения (зеленая область между краем и границами элемента), только тогда вызывается функция asyncCollectAndAction(eTarget.id);, но event.target не определена. Этого не происходит, хотя когда я нажимаю кнопку редактирования или элемент, кажется, что это происходит только при нажатии кнопки удаления.

Не могли бы вы опубликовать некоторые из сценариев, с которыми у вас возникли проблемы?

Justin Pearce 03.04.2019 23:18

ТАК, где фактический код javascript, который связывает щелчок?

epascarello 03.04.2019 23:19

@JustinPearce отредактировал код и более подробно объяснил внизу.

calexandru 03.04.2019 23:28

@epascarello добавил это.

calexandru 03.04.2019 23:31

ну, event.target — это то, на что вы нажимаете, поэтому, если вы нажмете на изображение, это будет элемент изображения, а не якорь. Так что вам придется переосмыслить свой код. Возможно, лучше использовать ближайший.

epascarello 03.04.2019 23:34

@epascarello точно, но это не тот случай, когда я нажимаю кнопку редактирования. Всякий раз, когда я нажимаю на элемент <img>, функция запускается независимо от привязки, хотя то же самое поведение не повторяется для кнопки удаления.

calexandru 03.04.2019 23:36

ваш код использует edit-data, но html показывает edit-product. Какой правильный?

Gabriele Petrioli 03.04.2019 23:42

Кроме того, ваша функция принимает e в качестве параметра события, но вы используете глобальную переменную event внутри метода. Будьте последовательны и используйте e в обоих случаях.

Gabriele Petrioli 03.04.2019 23:47

Наконец попробуйте с const eTarget = e.target.closest('a[data-type = "product"]');

Gabriele Petrioli 03.04.2019 23:48
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
9
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Целью события является тег img, который, вероятно, не имеет класса CSS, который ищет ваш JavaScript. Похоже, что изображение является дочерним узлом тега привязки, который имеет класс CSS. Вместо этого вам нужно подняться вверх по дереву документа, начиная с элемента event.target, в поисках класса CSS. Если у текущего элемента его нет, перейдите к parentNode. Продолжайте до тех пор, пока parentNode не станет нулевым.

Это была моя первая мысль при восхождении по дереву DOM, но проблема не возникает, когда я нажимаю кнопку редактирования, она реагирует так, как будто <img> даже нет, поэтому я запутался.

calexandru 03.04.2019 23:39

Это может работать для кнопки редактирования, если класс CSS находится в теге img.

Greg Burghardt 03.04.2019 23:42

Другие вопросы по теме