【发布时间】:2010-11-17 03:27:08
【问题描述】:
如果一个 javascript 函数是匿名声明的,有没有办法覆盖它或它的一部分?
我正试图阻止 google.com 的即时搜索劫持向上和向下箭头键来移动您的搜索排名。我已经确定了我认为有问题的代码部分。键码 38 和 40 用于向下键和向上键。
if (b == 40) aa(f);
else if (b == 38) aa(j);
else if (b == 37 || b == 39) if (!ca(b == 39)) return f;
a.preventDefault && a.preventDefault();
return a.returnValue = j
问题在于这是一个名为 Sb = function (a) {} 的函数的一部分,它位于大约三千行匿名函数的内部。 SO here 上发布了一个类似的问题,作者最终以一种不适用于我的 hacky 方式解决了问题。我意识到我可以关闭即时搜索,但我喜欢它,我就是无法忍受我的箭头键不再起作用了。
解决方案:
我最终写了一个chrome extension 来将向上/向下箭头键功能恢复为滚动。我使用了以下代码。感谢 Raze 和 Mofle。
if (event.keyCode == 40 || event.keyCode == 38) {
event.cancelBubble = true;
event.stopPropagation();
return false;
}
【问题讨论】:
-
当前行为到底是什么?哪个是想要的?你能链接到一个例子吗??
-
@jcane86 - 基本上谷歌即时搜索会覆盖向上和向下箭头按键。这些通常滚动页面。相反,谷歌选择让这些箭头从结果列表中向下跳。我不使用鼠标,所以按向下箭头快速扫描页面效果最好。现在我必须按八次向下箭头才能在屏幕底部看到结果。
-
为什么不能使用 pageup/pagedown 来获得所需的行为,而不是覆盖箭头键事件侦听器?
-
@ampersand - 因为向上/向下翻页是生涩的。我喜欢点击箭头键并用我的眼睛扫描。如果你用谷歌搜索这个问题,你会发现很多人不喜欢这个新行为。
-
你不需要 cancelBubble 因为它只是 IE 并且被贬低了。你也不需要 return false。
标签: javascript function overriding anonymous