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

Bootstrap弹窗显示时导航偏移,自定义JS触发类型错误

错误原因分析
  • 变量名不一致:自定义JS里定义了bodyTag,但后续操作的是未声明的body变量,导致读取body.classList时body为null,触发TypeError。
  • 类名判断错误:classList.contains(".modal-open")多了前缀点,正确写法是classList.contains("modal-open"),带点会导致无法匹配到目标类名。
  • 执行时机问题:如果这段JS在<body>标签之前加载,document.querySelector("body")会返回null,进而无法读取classList属性。
导航偏移的解决方案

Bootstrap弹窗给body添加padding-right:17px,是为了抵消弹窗打开时页面滚动条隐藏带来的跳动问题。以下是两种更稳妥的解决方式:

方案一:CSS直接覆盖(推荐)

无需编写复杂JS,通过CSS优先级覆盖Bootstrap默认样式:

body.modal-open {
  padding-right: 0 !important;
}

如果担心滚动条消失导致页面内容跳动,可额外设置弹窗打开时保留滚动条:

body.modal-open {
  overflow: visible !important;
  padding-right: 0 !important;
}

方案二:修复JS逻辑并监听弹窗事件

先修正原弹窗JS的选择器错误(缺少#),再通过弹窗的show.bs.modal/hide.bs.modal事件精准控制body的padding:

修正后的jQuery版本

$(document).ready(function () {
    // 修正选择器,添加#
    var url = $("#BetterConnect").attr("src");
    $("#BetterConnect").on("hide.bs.modal", function () {
      $("#BetterConnect").attr("src", "");
      // 弹窗隐藏时恢复body默认padding
      document.body.style.paddingRight = "";
    });
    $("#BetterConnect").on("show.bs.modal", function () {
      $("#BetterConnect").attr("src", url);
      // 弹窗显示时设置body padding为0
      document.body.style.paddingRight = "0";
    });
  });

纯原生JS版本(无需jQuery)

document.addEventListener('DOMContentLoaded', function() {
  const modal = document.getElementById('BetterConnect');
  const body = document.body;
  const url = modal.getAttribute('src');
  
  // 控制body padding
  modal.addEventListener('show.bs.modal', () => {
    body.style.paddingRight = '0';
  });
  modal.addEventListener('hide.bs.modal', () => {
    body.style.paddingRight = '';
  });
  
  // 同步原弹窗的src重置逻辑
  modal.addEventListener('hide.bs.modal', () => {
    modal.setAttribute('src', '');
  });
  modal.addEventListener('show.bs.modal', () => {
    modal.setAttribute('src', url);
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:52:56