document.body.removeEventListener 无法移除按键事件的侦听器
document.body.removeEventListener not working for removing listener for keypress event
我正在添加一个事件侦听器,用于侦听 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();
}
});
}
试试这个
function closeImgModal() {
imgModal.style.display = "none";
document.body.style.overflowY = "auto";
document.body.removeEventListener('keypress', 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();
}
});
}
要删除侦听器,事件名称必须相同。你有 keyup 和 keypress。
处理函数引用也需要相同。为此,您需要一个命名函数,该函数是我从您的 addEventlistener 中使用的匿名函数创建的,并将其命名为 handleKeypress
现在 add/remove 使用的参数与要求的相同
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);
}
我正在添加一个事件侦听器,用于侦听 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();
}
});
}
试试这个
function closeImgModal() {
imgModal.style.display = "none";
document.body.style.overflowY = "auto";
document.body.removeEventListener('keypress', 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();
}
});
}
要删除侦听器,事件名称必须相同。你有 keyup 和 keypress。
处理函数引用也需要相同。为此,您需要一个命名函数,该函数是我从您的 addEventlistener 中使用的匿名函数创建的,并将其命名为 handleKeypress
现在 add/remove 使用的参数与要求的相同
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);
}