使用 jQuery toggleClass 切換 body 背景色實現「開關燈」效果,Chrome/Firefox 正常,IE 下點擊一次變黑,再點無反應。原因在於 IE 不會因 className 變更自動觸發背景重繪。
<script>
$(function () {
$("#kgd").click(function () {
$(document.body).toggleClass("night"); // IE 下不生效
});
});
</script>
<style>
.night { background-color: black; }
</style>
<input id="kgd" type="button" value="開關燈" />
IE (含 IE11) 的渲染引擎在 className 變更後,若樣式屬性為 background-color 且元素為 body,有時不會自動重繪。需強制觸發佈局/重繪。
$("#kgd").click(function () {
var $body = $(document.body);
$body.toggleClass("night");
// 強制同步 style,觸發重繪
$body.css("background-color", $body.hasClass("night") ? "black" : "white");
});
$("#kgd").click(function () {
var body = document.body;
body.classList.toggle("night");
void body.offsetWidth; // 強制 reflow
});
:root { --bg: white; }
body { background-color: var(--bg); }
.night { --bg: black; }
// JS
$("#kgd").click(() => document.body.classList.toggle("night"));
CSS 變數變更會自動觸發重繪,IE 不支援,需 Polyfill。
body 背景,改用全屏覆蓋層 <div id="overlay"> 切換 display: none/block,相容性最佳。body { background-color: white; } 確保初始值明確。classList.toggle 原生 API 替代 jQuery,減少依賴、效能更好。body 的 className 是否正確切換。background-color 是否更新。加上強制同步 style.backgroundColor 一行,即可解決 IE 下開關燈失效問題,且不影響現代瀏覽器體驗。