【问题标题】:Can't override ctrl+s in Firefox using jQuery Hotkeys无法使用 jQuery 热键覆盖 Firefox 中的 ctrl+s
【发布时间】:2013-01-29 10:11:19
【问题描述】:

我正在使用 jQuery Hotkeys 插件:http://code.google.com/p/js-hotkeys/

这是我正在使用的代码:

$(document).bind('keydown', 'Ctrl+s', function(event) { alert('saving?'); return false; });

在 Chrome 中它可以正常工作并且 Ctrl+s 的默认功能被覆盖,但在 Firefox 中它会触发警报并尝试保存 html 页面。

我知道必须有办法让它工作,F​​irefox 中的 Wordpress 让你按 ctrl+s 保存。

有什么想法吗?

【问题讨论】:

    标签: jquery jquery-plugins jquery-hotkeys


    【解决方案1】:

    似乎是 Firefox 中的一个错误,alert 会破坏代码的同步性。延迟警报似乎可以解决此问题:

    $(document).bind('keydown', 'Ctrl+s', function(event) {
      setTimeout(function() {
        alert('saving?');
      }, 0);
      return false;
    });
    

    JSbin


    这是一个测试用例来证明我的错误声明。

    $(document).bind('keydown', 'Ctrl+s', function(event) {
      event.preventDefault();
    });
    

    上述 (bin) 将很好地阻止保存对话框。现在,如果您在警报之前或之后添加警报,如果您执行event.preventDefault()event.stopImmediatePropagation()return false,则保存对话框出现:

    $(document).bind('keydown', 'Ctrl+s', function(event) {
      event.preventDefault();
      event.stopImmediatePropagation();
      alert('saving?');
      return false;
    });
    

    Bin

    如果没有alerts,event.preventDefault() 本身就足以阻止保存对话框,现在可以通过警报阻止默认操作。

    【讨论】:

    • 是的,你说得对,看来预防是第一要务。
    • @Talon 我相信这更多是 Firefox 的警报错误。我之前遇到过警报问题,因为它们目前不是 100% 同步的。看到这个test case
    • 帅哥。帮了我很多。谢谢你:)
    • 我认为 firefox 与 IE 的错误有关。希望他们修复其中的一些,而不是仅仅忽略它们。他们似乎只是忽略了他们的错误报告!
    【解决方案2】:

    这对我有用:

    <script>
            $(document).bind('keypress', 'Ctrl+s',
                function (event) {
                    event.preventDefault();
                    alert('saving?');
                });
    </script>
    

    【讨论】:

    • 是的,这也有效,好像我将阻止默认设置为延迟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 2016-07-28
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    相关资源
    最近更新 更多