У меня есть 1 div (сообщение), которое появляется на странице при загрузке страницы. Когда пользователь щелкает где-то на странице вне этого сообщения, я хочу, чтобы это сообщение исчезло и показ (ONCE) журнала в консоли, что сообщение исчезло. Проблема в том, что я продолжаю получать сообщения консоли каждый раз, когда я нажимаю на всю страницу на своей странице, хотя сообщение уже исчезло. И.Е. Я не могу отсоединить событие «click» с моей страницы. Код выглядит следующим образом:Javascript удалить событие click с удалением элемента
var elems = document.querySelectorAll(':not(#my-widget)'); //all elements in my page except message
var promptwidget = document.getElementById('my-widget');
console.log('WIDGET==> ' + promptwidget);
if (typeof(promptwidget) != 'undefined' && promptwidget != 'null') {
for (var i = 0; i < elems.length; i++) //add click eventlistener to the rest document
{
elems[i].addEventListener("click", function(e) {
e.preventDefault(),
removeWidget(["my-widget"]), //parentNode.removeChild wrapper, works OK
console.log('widget removed'), //received everytime I click on a page but I need only ONCE
promptwidget = document.getElementById('my-widget'); //tried to reassign a null value to my promptwidget var and call removeEventListener but no work
});
}
} else //this code never called, but I want it after my-widget removal
{
for (var i = 0; i < elems.length; i++) {
elems[i].removeEventListener("click", function(e) {
e.preventDefault(),
console.log("clickevent removed")
});
}
}
Любая помощь будет принята с благодарностью.
EDIT_1: Спасибо всем, проблема была решена следующим образом:
var elems = document.querySelectorAll(':not(#my-widget)');
var promptwidget = document.getElementById('my-widget');
for(var i = 0; i<elems.length; i++)
{
elems[i].addEventListener("click", function(e)
{
e.preventDefault();
if(typeof(promptwidget) != 'undefined' && promptwidget != null)
{
removeWidget(["my-widget"]),
console.log('widget removed'), //now showed once
promptwidget = undefined
}
});
}
This код был очень полезным
Возможно, вы могли бы написать короткий пример? Я не могу понять, что должно быть внутри этой функции? Спасибо – Jack
Пробовал это, а также как описано в связанном выше вопросе, но когда я добавляю и добавляю и удаляю EventListeners, сообщение не удаляется ((Если я прокомментирую removeEventListener, сообщение удаляется, но событие не отделяется. потому что я удаляю EventListener сразу после добавления. Может быть, я где-то ошибаюсь? – Jack