我有一个网页,我想将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);
}