点击td元素调用ch()函数时出现错误,请问原因是什么?
td元素onclick调用ch()报错但div正常的原因分析
先看你给出的代码:
JavaScript代码:
function ch() { console.log("cliked") }
HTML代码:
<table> <tr> <td onclick='ch()'> click on td </td> </tr> </table> <div onclick="ch()">click on div</div>
出现这种差异的常见原因有这几个:
作用域访问限制:如果
ch()函数不是定义在全局作用域,而是在闭包、模块这类局部作用域里,td所在的表格可能处于不同的上下文环境(比如动态插入的DOM、模板渲染后的节点),无法访问到这个函数;而div处于全局上下文,能正常调用。父元素事件拦截:表格的父元素(tr、table甚至更高层级节点)可能存在阻止事件冒泡的代码,比如
event.stopPropagation()或者return false,导致td的点击事件被拦截,没触发到ch();div没有这类父元素干扰,所以正常执行。引号解析异常:td的
onclick用了单引号'ch()',虽然标准允许,但部分旧浏览器或特殊渲染环境下,单引号嵌套可能出现解析错误,换成双引号"ch()"和div保持一致试试。CSS指针事件禁用:检查td的CSS样式,是否设置了
pointer-events: none;,这个属性会让元素无法接收点击事件,自然触发不了onclick;div没有这个样式,所以能正常响应。
内容的提问来源于stack exchange,提问作者Vitalicus
相关产品推荐
相关产品推荐

