WordPress中JavaScript点击显示列报错:Cannot read property 'style' of undefined
问题分析与解决方案:Uncaught TypeError 错误原因
这个错误的核心原因很明确:你在代码里尝试访问一个不存在的单元格的style属性。
具体为什么会报错?
看你的表格结构,第一行的<tr>里只有一个<td>(它用了colspan="3",把三列合并成了一个):
POLITICA DE PRIVACIDAD
而你的JS代码循环所有行时,固定要获取cels[2](也就是每行的第三个<td>,索引从0开始):
var cels = rows[row].getElementsByTagName('td') cels[2].style.display = stl;
当循环到第一行时,cels数组只有1个元素(只有cels[0]),cels[2]就是undefined,尝试读取undefined的style属性自然就抛出了Cannot read property 'style' of undefined的错误。
另外还有个小问题:你的函数接收了col_no参数,但完全没用到它,代码里硬写了cels[2],这也违背了函数的复用性设计。
修复方案
这里给你两种可行的修复方式:
1. 跳过单元格数量不足的行
在操作单元格之前,先判断当前行的单元格数量是否足够,避免访问不存在的索引:
function show_hide_column(col_no, do_show) { alert(col_no); // 用三元运算符简化赋值,更简洁 var stl = do_show ? 'block' : 'none'; var tbl = document.getElementById('id_of_table'); var rows = tbl.getElementsByTagName('tr'); for (var row = 0; row < rows.length; row++) { var cels = rows[row].getElementsByTagName('td'); // 确保当前行存在目标索引的单元格再操作 if (cels[col_no]) { cels[col_no].style.display = stl; } } }
2. 优化HTML中的onclick调用
另外,你的<a>标签里的onClick='javascript:show_hide_column(2, false);'可以去掉javascript:前缀,直接写onClick='show_hide_column(2, false);'就可以,这个前缀是多余的。
额外优化建议
- 记得给JS语句加上分号,避免自动分号插入带来的潜在问题
- 如果表格有
<thead>或<tbody>,可以更精准地获取行(比如只操作<tbody>里的行),避免表头行的干扰
内容的提问来源于stack exchange,提问作者Carl35
相关产品推荐
相关产品推荐

