У меня есть небольшая проблема, которую я даже не знаю, как объяснить. Главное, что у меня две кнопки, один из них - открыть форму редактирования:
И еще один для удаления и элемента:
Теперь главный вопрос в том, что и как реагирует, когда я нажимаю и где я нажимаю. Всякий раз, когда я нажимаю кнопку для редактирования (как вы можете видеть, у нее есть немного отступов по бокам), 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 не определена. Этого не происходит, хотя когда я нажимаю кнопку редактирования или элемент, кажется, что это происходит только при нажатии кнопки удаления.
ТАК, где фактический код javascript, который связывает щелчок?
@JustinPearce отредактировал код и более подробно объяснил внизу.
@epascarello добавил это.
ну, event.target — это то, на что вы нажимаете, поэтому, если вы нажмете на изображение, это будет элемент изображения, а не якорь. Так что вам придется переосмыслить свой код. Возможно, лучше использовать ближайший.
@epascarello точно, но это не тот случай, когда я нажимаю кнопку редактирования. Всякий раз, когда я нажимаю на элемент <img>, функция запускается независимо от привязки, хотя то же самое поведение не повторяется для кнопки удаления.
ваш код использует edit-data, но html показывает edit-product. Какой правильный?
Кроме того, ваша функция принимает e в качестве параметра события, но вы используете глобальную переменную event внутри метода. Будьте последовательны и используйте e в обоих случаях.
Наконец попробуйте с const eTarget = e.target.closest('a[data-type = "product"]');



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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