4

我有一个网页,我想将 Ctrl+N 重新映射到不同的行为。我按照 YUI 的注册键侦听器的示例并调用了我的函数,但 Firefox 仍然创建一个新的浏览器窗口。事情似乎在 IE7 上运行良好。如何阻止新窗口显示?

例子:

var kl2 = new YAHOO.util.KeyListener(document, { ctrl:true, keys:78 },
             {fn:function(event) {
                     YAHOO.util.Event.stopEvent(event); // Doesn't help
                     alert('Click');}});
kl2.enable();

可以删除默认行为。Google Docs 会覆盖 Ctrl+S 来保存您的文档,而不是打开 Firefox 的保存对话框。我用 Ctrl+S 尝试了上面的例子,但 Firefox 的保存对话框仍然弹出。由于谷歌可以阻止保存对话框出现,我确信有一种方法可以阻止大多数默认键盘快捷键。

4

4 回答 4

7

诀窍是'fn'功能很糟糕。

通过实验,您可以看到 fn 的函数类型有两个参数。第一个参数实际上包含事件的类型。第二个包含......这很奇怪:一个包含索引 0 处的代码点和索引 1 处的实际事件对象的数组。

所以稍微改变一下你的代码,它应该看起来像这样:

function callback(type, args)
{
    var event = args[1]; // the actual event object
    alert('Click');

    // like stopEvent, but the event still propogates to other YUI handlers
    YAHOO.util.Event.preventDefault(event);
}
var kl2 = new YAHOO.util.KeyListener(document, { ctrl:true, keys:78 }, {fn:callback});
kl2.enable();

此外,出于对 lisp 的喜爱,请勿在代码中使用原始代码点。使用 'N'.charCodeAt(0) 而不是 "78"。或者把它包装成一个函数

function ord(char)
{
    return char.charCodeAt(0);
}
于 2009-04-24T15:09:25.913 回答
0

我只是在这里猜测,但我不认为它可以做到。

如果可能,那绝对不应该。通用键盘快捷键是您不应该乱用的东西。下一步是什么?钩住窗口关闭按钮以打开一个新窗口...

于 2008-10-03T11:15:38.520 回答
0

使用 YUI 的事件工具,您可以尝试使用stopEvent方法:

但是,由于大多数用户习惯于在浏览器中执行特定操作的按键(在您的示例中为新窗口),因此我总是避免发生冲突,这实际上意味着我不使用任何元键或控制键。

我只是单独使用字母,在你有文本输入框之前这很好,所以这个建议对你来说可能不太有用。

于 2008-11-13T23:49:42.823 回答
0

尽管覆盖默认浏览器快捷方式并非易事,但在某些情况下,这样做是值得的,因为它使应用程序具有更专业的外观。看看这个脚本:

http://www.openjs.com/scripts/events/keyboard_shortcuts/index.php#disable_in_input

事实证明对我来说很好用..

于 2009-02-23T10:24:24.570 回答