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
相关产品推荐
相关产品推荐

