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

如何将ID名称作为参数传入可见性切换函数并解决报错?

解决切换指定ID元素可见性时的参数传递错误

问题概述

你尝试将元素ID作为参数传入切换可见性的函数以复用代码,但修改后出现错误:
Uncaught TypeError: Cannot read properties of null (reading 'style')
中文翻译:未捕获的类型错误:无法读取null的属性(读取'style')

你的错误实现代码:

<div onClick="toggleViz(item1)">Click this 1</div>
<div onClick="toggleViz(item2)">Click this 2</div>

<div id="item1" style="display: none;">
   <p>Item 1       
</div>

<div id="item2" style="display: none;">
   <p>Item 2       
</div>

<script>
function toggleViz(id_name) {
    var x = document.getElementById(id_name);
    if (x.style.display === "none") {
        x.style.display = "block";
    } else {
        x.style.display = "none";
    }
}
</script>

错误原因

调用toggleViz(item1)时,item1被当作变量解析,但页面中并没有定义名为item1的变量,导致函数接收到的参数是undefined。document.getElementById(undefined)会返回null,后续访问null.style自然触发报错。

正确解决方案

需要把ID作为字符串参数传入函数,调用时给ID添加单引号或双引号:

<div onClick="toggleViz('item1')">Click this 1</div>
<div onClick="toggleViz('item2')">Click this 2</div>

<div id="item1" style="display: none;">
   <p>Item 1       
</div>

<div id="item2" style="display: none;">
   <p>Item 2       
</div>

<script>
function toggleViz(id_name) {
    var x = document.getElementById(id_name);
    // 增加空值判断,避免ID不存在时报错
    if (!x) return;
    if (x.style.display === "none") {
        x.style.display = "block";
    } else {
        x.style.display = "none";
    }
}
</script>

额外优化建议

1. 使用CSS类控制显示隐藏(更灵活)

定义CSS类:

.hidden { display: none; }

修改函数逻辑,通过切换类实现效果:

function toggleViz(id_name) {
    var x = document.getElementById(id_name);
    if (!x) return;
    x.classList.toggle('hidden');
}

2. 利用jQuery简化代码(已引入jQuery的情况下)

<div onClick="toggleViz('item1')">Click this 1</div>
<div onClick="toggleViz('item2')">Click this 2</div>

<div id="item1" class="hidden">
   <p>Item 1       
</div>

<div id="item2" class="hidden">
   <p>Item 2       
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
function toggleViz(id_name) {
    $('#' + id_name).toggle();
}
</script>

内容的提问来源于stack exchange,提问作者Glenn Thomas Davis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:45:31