Javascript document.body.removeEventListener不用于删除按键事件的侦听器
我正在添加一个事件侦听器,它侦听Escape按键并关闭图像模式,但在Escape按键上,图像模式关闭,但事件侦听器不删除。这是我的密码。请告诉我如何解决这个问题Javascript document.body.removeEventListener不用于删除按键事件的侦听器,javascript,event-handling,Javascript,Event Handling,我正在添加一个事件侦听器,它侦听Escape按键并关闭图像模式,但在Escape按键上,图像模式关闭,但事件侦听器不删除。这是我的密码。请告诉我如何解决这个问题 function closeImgModal() { imgModal.style.display = "none"; document.body.style.overflowY = "auto"; document.body.removeEventListener('ke
function closeImgModal() {
imgModal.style.display = "none";
document.body.style.overflowY = "auto";
document.body.removeEventListener('keydown', closeImgModal)
}
function openBig(el) {
document.body.style.overflowY = "hidden";
imgModal.style.display = "block";
randomImg.src = el.src;
document.body.addEventListener('keypress', function (e) {
console.log(e);
if (e.key === "Escape") {
closeImgModal();
}
});
}
试试这个
函数closeImgModal(){
imgModal.style.display=“无”;
document.body.style.overflowY=“自动”;
document.body.removeEventListener('keypress',closeImgModal)
}
函数openBig(el){
document.body.style.overflowY=“隐藏”;
imgModal.style.display=“block”;
randomImg.src=el.src;
document.body.addEventListener('keypress',函数(e){
控制台日志(e);
如果(e.key==“Escape”){
closeImgModal();
}
});
}
要删除侦听器,事件名称必须相同。你有keyup和keypress
处理程序函数引用也需要相同。为此,您需要一个命名函数,我从addEventlistener中使用的匿名函数中创建了该函数,并将其命名为handleKeypress
现在,用于添加/删除的参数与所需的参数相同
function closeImgModal() {
imgModal.style.display = "none";
document.body.style.overflowY = "auto";
document.body.removeEventListener('keypress', handleKeypress)
}
function handleKeypress(e) {
console.log(e);
if (e.key === "Escape") {
closeImgModal();
}
}
function openBig(el) {
document.body.style.overflowY = "hidden";
imgModal.style.display = "block";
randomImg.src = el.src;
document.body.addEventListener('keypress', handleKeypress);
}
您添加的侦听器必须与您添加的函数完全相同。不幸的是,这仍然不起作用,但必须确保事件名称相同。。但与其让人们试图弄明白你改变了什么,不如在你的回答中解释一下。