javascript – 防止YUI中的键监听器中的默认行为

我有一个网页,我想将Ctrl N重新映射到不同的行为.我按照YUI的注册Key Listeners示例调用了我的函数,但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文档会覆盖Ctrl S以保存文档,而不是显示Firefox的保存对话框.我用Ctrl S尝试了上面的例子,但Firefox的保存对话框仍然弹出.由于谷歌可以阻止保存对话框出现,我确信有一种方法可以阻止大多数默认键盘快捷键.

解决方法:

诀窍是’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);
}
上一篇:javascript – 用于新项目的YUI和/或jQuery?


下一篇:CentOS7 Raid卡问题导致磁盘IO暴增与处理