Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript document.body.removeEventListener不用于删除按键事件的侦听器_Javascript_Event Handling - Fatal编程技术网

Javascript document.body.removeEventListener不用于删除按键事件的侦听器

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

我正在添加一个事件侦听器,它侦听Escape按键并关闭图像模式,但在Escape按键上,图像模式关闭,但事件侦听器不删除。这是我的密码。请告诉我如何解决这个问题

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);
}

您添加的侦听器必须与您添加的函数完全相同。不幸的是,这仍然不起作用,但必须确保事件名称相同。。但与其让人们试图弄明白你改变了什么,不如在你的回答中解释一下。