点击复选框时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
相关产品推荐
相关产品推荐

