【问题标题】:Prevent Default Behavior in Key Listeners in YUI防止 YUI 中关键侦听器的默认行为
【发布时间】:2008-10-03 09:48:20
【问题描述】:

我有一个网页,我想将 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 的保存对话框仍然弹出。由于 Google 可以阻止保存对话框出现,我确信有一种方法可以阻止大多数默认键盘快捷键。

【问题讨论】:

    标签: javascript firefox yui


    【解决方案1】:

    诀窍是 '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);
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 有可能。试试谷歌文档。他们覆盖 Ctrl+S 来保存他们的文档而不是保存页面。我试图覆盖 Ctrl+S 作为测试并出现保存对话框。
      • 真可惜。我并不是说在这种情况下 google 功能不好,但我仍然认为不应该触及默认的快捷方式。
      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        虽然覆盖默认浏览器快捷方式并非易事,但在某些情况下这样做是值得的,因为它可以让应用程序看起来更专业。看看这个脚本:

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

        结果对我来说效果很好..

        【讨论】:

          猜你喜欢
          • 2019-05-09
          • 2019-03-17
          • 1970-01-01
          • 1970-01-01
          • 2014-05-30
          • 2023-03-06
          • 2023-04-10
          • 2017-06-25
          相关资源
          最近更新 更多