【发布时间】:2012-09-26 23:09:21
【问题描述】:
转到 Twitter 的登录页面并在控制台中输入以下内容:
window.addEventListener('keypress', function(e){console.log('hello')}, true)
(注意:如何将第三个参数设置为true 以启用事件捕获。这会导致事件在被子元素消费之前首先被窗口拦截。)
尝试按一些键。注意hello 没有输出到控制台。为keydown 或keyup 添加事件监听器不会改变任何事情。
hello 将在大多数网站上获得输出,但不会在 Twitter 或 Gmail 等网站上获得输出。
为什么?是什么阻止了事件侦听器?
编辑:似乎在 Firefox 上按预期工作。但不是铬。为什么 Chrome 没有按预期触发事件侦听器?
编辑 2:正如下面一些人所推断的,console.log 是 Chrome 上的一个空函数,用于 Twitter 和 Gmail 等网站。这是为什么呢?
【问题讨论】:
-
你不应该把它添加到
document而不是window吗? -
他们可能正在使用
keydown取消某些键的事件。 -
为什么? (这仍然不能解决问题。)
-
呃,在 cmets 上有点竞争条件(我正在回复 Bergi 的原始评论。)
-
我没有这个问题。在 Gmail 和 Twitter 的登录页面中都正确调用了处理函数。确保您在测试中专注于 firebug(或您正在使用的任何开发控制台)。
标签: javascript events event-handling dom-events