JavaScript新手按钮切换段落内容时if判断始终进入else分支问题
问题根源说明
你当前写的判断逻辑存在根本性的认知偏差,这也是导致代码永远跳过if分支进else的直接原因:
你在
beginWalk函数中尝试通过getElementById获取id为yes的按钮后,判断其click属性是否为true——实际上DOM元素原生的click是一个用于主动触发元素点击行为的方法,根本不是记录“用户是否点击了该按钮”的布尔值,这个判断条件从语法上就永远不可能成立,因此代码会直接跳过if分支执行else逻辑。
适配你现有代码结构的修正方案
不需要完全推翻之前写的内容,只要把判断逻辑替换掉即可,改完就能正常运行:
- 最省事的改法:给绑定的函数传参,不用额外读取DOM状态
把两个按钮的onclick绑定改成传不同的标记值:
对应的JS函数修改为:<button id="yes" onclick="beginWalk('yes')">是</button> <button id="no" onclick="beginWalk('no')">否</button>function beginWalk(choice) { const changeTarget = document.getElementById('change'); if (choice === 'yes') { // 点击是按钮时的文本切换逻辑 changeTarget.innerHTML = "你顺着步道走到了岔路口,前方隐约能看到废弃小屋的轮廓"; } else { // 点击否按钮时的文本切换逻辑 changeTarget.innerHTML = "你转身往回走,裤脚突然被什么东西勾住了"; } } - 如果想保留原来两个按钮绑定同一个无参
beginWalk函数的写法,就不用去判断元素的click属性,直接在函数内获取当前获得焦点的按钮元素做判断即可:function beginWalk() { const currentBtn = document.activeElement; const changeTarget = document.getElementById('change'); if (currentBtn.id === 'yes') { changeTarget.innerHTML = "你选择继续往前走,踩碎了一地干枯的橡果"; } else { changeTarget.innerHTML = "你停下脚步,听见身后传来细微的脚步声"; } }
内容的提问来源于stack exchange,提问作者mac_raptor
相关产品推荐
相关产品推荐

