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

点击复选框时check函数未调用,报Uncaught TypeError错误如何解决?

解决Uncaught TypeError: check is not a function的问题

这个问题我太熟了,核心原因是你在check()函数内部的变量名和函数名重名了,导致函数被意外覆盖!

问题分析

你定义了一个名为check的函数,但在函数内部又写了check=true;——在全局作用域下,这个赋值操作会直接把原本指向函数的check变量改成布尔值true。第一次点击复选框时,函数还能执行,但执行完之后check就不再是函数了,第二次点击自然就抛出“check不是函数”的错误。

修复方案

只需要把函数内部的变量名改成和函数名不一样的就行,比如换成isChecked或者其他任意不冲突的名字:

修改后的完整代码

<tr>
  <td>Enter Subject:</td>
  <td>
    <input type="checkbox" name="subject" onclick="check();" class="subject" value="maths"> Maths
    <input type="checkbox" name="subject" onclick="check();" class="subject" value="chemistry"> Chemistry
  </td>
</tr>
<script>
function check() {
  // 把变量名改成和函数名不冲突的
  isChecked = true;
  // 如果你需要获取当前复选框的选中状态,也可以这样写:
  // const checkbox = event.target;
  // const isChecked = checkbox.checked;
}
</script>

额外优化建议(可选)

为了避免这类作用域冲突问题,推荐尽量不要使用内联事件处理(比如onclick),改用addEventListener绑定事件,同时把变量放在函数局部作用域里:

<tr>
  <td>Enter Subject:</td>
  <td>
    <input type="checkbox" name="subject" class="subject" value="maths"> Maths
    <input type="checkbox" name="subject" class="subject" value="chemistry"> Chemistry
  </td>
</tr>
<script>
// 获取所有复选框元素
const checkboxes = document.querySelectorAll('.subject');

// 绑定事件处理函数
checkboxes.forEach(checkbox => {
  checkbox.addEventListener('click', function() {
    // 这里的变量是局部的,不会和任何全局变量冲突
    const isChecked = this.checked;
    console.log(`科目${this.value}的选中状态:${isChecked}`);
  });
});
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:17:40