石头剪刀布游戏按钮点击事件失效问题求助
问题出在事件监听器的回调传递方式上!
嘿,这个问题我太熟了!你现在的代码里,addEventListener的第二个参数是直接执行了playRound('paper',computerPlay()),而不是把函数本身作为点击时的回调。
具体来说:
- 当你写
playRound('paper',computerPlay())的时候,JavaScript会立刻执行这个函数,把它的返回值(比如可能是"你输了!"或者undefined)传给事件监听器。但点击事件需要的是一个函数引用——也就是当点击发生时才会去执行的函数,而不是提前跑出来的结果。 - 这就导致页面一加载,
playRound就偷偷执行了一次,但等你点击按钮的时候,因为回调根本不是可执行的函数,自然没反应啦。
怎么修复?
把playRound包装成一个匿名函数,让它只有在点击时才会被调用:
var paperButton = document.querySelector("#paper"); paperButton.addEventListener("click", function() { playRound('paper', computerPlay()); });
如果习惯ES6语法,用箭头函数会更简洁:
const paperButton = document.querySelector("#paper"); paperButton.addEventListener("click", () => playRound('paper', computerPlay()));
这样改完之后,每次点击按钮时,才会触发playRound,同时调用computerPlay()生成新的电脑出拳,完全符合你的预期~
内容的提问来源于stack exchange,提问作者Plínio Helpa
相关产品推荐
相关产品推荐

