HTML内onclick调用calleoChat正常,JS动态创建按钮触发失败如何解决
问题原因
当你通过JS给DOM元素的onclick属性赋值时,该属性需要接收函数对象作为值,你直接传入字符串"javascript:calleoChat('startChat')"的话,浏览器不会将其解析为可执行的点击逻辑,因此点击无响应。
而HTML内联写的onclick属性天然会被浏览器解析为匿名函数包裹的可执行代码,因此原生写的按钮可以正常触发。
解决方法
你可以任选以下任意一种方案修改代码:
- 方案1:给
onclick属性赋值匿名函数
修改对应代码为:
btn.onclick = function() { calleoChat('startChat'); };
- 方案2:使用
addEventListener绑定点击事件(更推荐,支持绑定多个同类型事件不冲突)
修改对应代码为:
btn.addEventListener('click', function() { calleoChat('startChat'); });
额外注意事项
- 确保
calleoChat方法挂载在全局作用域下,可被当前上下文访问到 - 你代码中的
node变量需要提前创建,否则执行node.appendChild(btn)会抛出未定义错误,完整修正后的代码示例:
<script> // 提前创建节点容器 let node = document.createElement('div'); //button creation let btn = document.createElement("button"); btn.innerHTML = "Open Chat-Bot"; // 绑定点击事件 btn.addEventListener('click', function() { calleoChat('startChat'); }); node.appendChild(btn); //insert button to selected class document.getElementsByClassName("AddToBagButton__container")[0].appendChild(node); </script>
内容的提问来源于stack exchange,提问作者Jin Park
相关产品推荐
相关产品推荐

