函数在button上可正常运行,在p标签上失效,求排查问题
问题原因及修复方案
你的代码存在两个关键错误,导致addEventListener绑定的点击事件无法生效:
1. 事件回调的函数调用方式错误
使用addEventListener时,第二个参数不能直接写showAcc('acc-mobil')——这种写法会立即执行函数,而不是把函数作为点击触发的回调绑定。必须用匿名函数包裹,或者通过bind传递参数,保证函数只在点击时执行。
2. 语法错误
addEventListener那一行末尾缺少一个右括号,导致浏览器解析脚本失败,直接跳过了这段绑定逻辑。
修正后的完整代码
<button type="button" onclick="showAcc('acc-mobil')">Mobil</button> <p id="showmob">Mobil</p> <script> // 用匿名函数包裹,确保点击时才调用目标函数并传参 document.getElementById("showmob").addEventListener("click", function() { showAcc('acc-mobil'); }); function showAcc(param) { document.getElementById("acc-mobil").style.display = "none" ; document.getElementById("acc-faktura").style.display = "none" ; document.getElementById("acc-vaxel").style.display = "none" ; document.getElementById("acc-internet").style.display = "none" ; document.getElementById("acc-kontor").style.display = "none" ; document.getElementById("acc-ab").style.display = "none" ; document.getElementById(param).style.display = "block" ; } </script>
额外优化建议
可以把隐藏所有元素的逻辑封装成独立函数,减少重复代码:
function hideAllAcc() { const accIds = ['acc-mobil', 'acc-faktura', 'acc-vaxel', 'acc-internet', 'acc-kontor', 'acc-ab']; accIds.forEach(id => document.getElementById(id).style.display = 'none'); } function showAcc(param) { hideAllAcc(); document.getElementById(param).style.display = "block" ; }
内容的提问来源于stack exchange,提问作者lindbergpat
相关产品推荐
相关产品推荐

