Пробовали код под кодом, но он не уничтожает Popstate Event
.
Пожалуйста, помогите нам с примером, в котором я могу уничтожить Popstate Event
в зависимости от условия.
history.pushState(null, document.title, location.href);
window.addEventListener('popstate', function (event) {
if (true){
history.pushState(null, document.title, location.href);
console.info('Back Button Prevented');
} else {
window.removeEventListener('popstate', ()=> {
console.info('Go back');
}, true);
history.back();
}
});
Второй аргумент, который вы передаете removeEventListener
, должен быть функция, которую вы хотите удалить.
Вы передаете функцию разные, которая не зарегистрирована как обработчик событий, поэтому ничего не происходит.
Объявите свой обработчик событий как функцию со ссылкой, которую вы можете использовать повторно. Затем используйте эту ссылку для обеremoveEventListener
и addEventListener
.
history.pushState(null, document.title, location.href);
function myEventListener (event) {
if (true){
history.pushState(null, document.title, location.href);
console.info('Back Button Prevented');
} else {
window.removeEventListener('popstate', myEventListener);
history.back();
}
}
window.addEventListener('popstate', myEventListener);
Чтобы удалить слушателя, вы должны передать саму функцию слушателя removeEventListener()
.
Другая проблема в вашем коде заключается в том, что при использовании if (true)
вы никогда не достигнете блока else
, удаляющего слушателя. Что вы, вероятно, захотите сделать, так это иметь логическую переменную вне слушателя, которую вы изменяете при первом вызове слушателя.
var backButtonPrevented = false;
history.pushState(null, document.title, location.href);
function popStateListener(event) {
if (backButtonPrevented === false){
history.pushState(null, document.title, location.href);
console.info('Back Button Prevented');
backButtonPrevented = true;
} else {
window.removeEventListener('popstate', popStateListener);
history.back();
}
}
window.addEventListener('popstate', popStateListener);
Он добавил пример, он прямо в его ответе. :)