You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

window.onkeypress与addEventListener绑定函数仅页面加载时执行,按键无响应

问题原因

你现在的写法是直接执行了函数,而不是把函数作为事件处理器绑定给事件:

  • 当你写myFunction1()时,括号会让函数立刻运行,弹出"Hi",然后把函数的返回值(这里是undefined,因为函数没有return语句)赋值给window.onkeypress。按键触发事件时,浏览器会尝试调用这个undefined,自然没有反应。
  • 同理,myFunction2(3, 2)也是立刻执行,打印出5,返回undefined给addEventListener,所以keyup事件触发时没有可执行的函数。

修正方案

事件绑定需要传递函数引用(不带括号的函数名),如果需要传参,要用匿名函数或者bind来包裹:

1. 修正onkeypress绑定

去掉函数后的括号,直接赋值函数本身:

window.onkeypress = myFunction1;

2. 修正addEventListener绑定(带参数)

方法一:用匿名函数包裹

window.addEventListener("keyup", function() {
  myFunction2(3, 2);
});

这样只有当keyup事件触发时,才会执行匿名函数,进而调用myFunction2并传入参数。

方法二:使用bind方法

window.addEventListener("keyup", myFunction2.bind(null, 3, 2));

bind会返回一个新函数,当事件触发时,这个新函数会带着指定的参数调用myFunction2,第一个参数null是绑定的this值(这里不需要用到this,所以传null即可)。


内容的提问来源于stack exchange,提问作者Primary Fire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 10:20:36