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