You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

复选框勾选时锁定页面滚动问题求助

嘿,我一眼就看到你代码里的关键问题啦!核心是事件监听的绑定方式错了,还有一些细节没考虑到,让我一步步给你讲清楚:

问题根源:错误的事件绑定写法

你在两种代码里都写了:

modalToggle.addEventListener('click', isOpen());

这里的isOpen()是立即执行函数——页面一加载就会跑一次这个函数,但并不会把它绑定成点击事件的回调。正确的写法是直接传函数本身(不带括号):isOpen。

修正第一种方案(锁定body滚动)

除了绑定方式,你还漏掉了关闭模态框时恢复滚动的逻辑,不然打开一次后页面就永远不能滚动了。修正后的代码:

var modalToggle = document.getElementById('vids'); 
function isOpen() { 
  if(modalToggle.checked === true) { 
    document.body.style.overflow = "hidden"; 
  } else {
    document.body.style.overflow = "auto"; // 恢复默认滚动行为
  }
} 
modalToggle.addEventListener('click', isOpen); // 这里去掉括号!

修正第二种方案(隐藏长div)

同样是绑定方式的问题,加上关闭时恢复显示的逻辑:

var modalToggle = document.getElementById('vids'); 
var space = document.getElementById('space'); 
function isOpen() { 
  if(modalToggle.checked === true) { 
    space.style.display = "none"; 
  } else {
    space.style.display = "block"; // 关闭模态框时重新显示
  }
} 
modalToggle.addEventListener('click', isOpen); // 去掉括号

额外小建议:用CSS类控制更优雅

其实更推荐用切换CSS类的方式来控制,把样式和JS逻辑分开,维护起来更方便:

  1. 先在CSS里加一个类:
.modal-open {
  overflow: hidden;
}
  1. 然后JS里只需要切换这个类:
var modalToggle = document.getElementById('vids'); 
modalToggle.addEventListener('click', function() {
  document.body.classList.toggle('modal-open');
});

这样不管是打开还是关闭模态框,一行代码就能搞定,是不是更清爽?

内容的提问来源于stack exchange,提问作者panrosmithe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:02:43