当前位置:  开发笔记 > 编程语言 > 正文

使用JQuery捕获CTRL + S的最佳跨浏览器方法?

如何解决《使用JQuery捕获CTRL+S的最佳跨浏览器方法?》经验,为你挑选了7个好方法。

我的用户希望能够点击Ctrl+ S来保存表单.是否有一个很好的跨浏览器方式捕获Ctrl+ S组合键并提交我的表单?

应用程序基于Drupal构建,因此jQuery可用.



1> Danny Ruijte..:

这适用于我(使用jquery)重载Ctrl+ S,Ctrl+ FCtrl+ G:

$(window).bind('keydown', function(event) {
    if (event.ctrlKey || event.metaKey) {
        switch (String.fromCharCode(event.which).toLowerCase()) {
        case 's':
            event.preventDefault();
            alert('ctrl-s');
            break;
        case 'f':
            event.preventDefault();
            alert('ctrl-f');
            break;
        case 'g':
            event.preventDefault();
            alert('ctrl-g');
            break;
        }
    }
});


如果使用`window.addEventListener(`而不是`$(window).bind(`
这是我测试的所有浏览器中唯一适用的答案,包括Chrome版本28.0.1500.71
@NatesS如果删除警报则不会打开保存对话框.它是由于警报造成的.在所有浏览器中都适用于我.很好的解决方法.
为我工作.请接受上述答案.

2> Jim..:
$(window).keypress(function(event) {
    if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true;
    alert("Ctrl-S pressed");
    event.preventDefault();
    return false;
});

浏览器的密钥代码可能有所不同,因此您可能需要检查的不仅仅是115.


在chrome中使用`keydown`而不是`keypress`
即使使用$(document).keypress(而不是$(window).keypress),IE和Chrome仍然会在脚本执行之前使用'Ctrl'来获取按键事件.
仅适用于我的Firefox.IE9和Chrome不会注册任何按键.
在OS X webkit浏览器上,cmd + s返回19,因此也值得检查.即if(!(event.which == 115 && event.ctrlKey)&&!(event.which == 19))return true;
在Chrome的CTRL中不起作用。
不幸的是,它已经过时了

3> EndangeredMa..:

您可以使用快捷方式库来处理特定于浏览器的内容.

shortcut.add("Ctrl+S",function() {
    alert("Hi there!");
});


对于Google员工,jQuery插件的更新URL是:https://github.com/jeresig/jquery.hotkeys
这已被转换为jQuery插件,分叉和重新编译,现在支持1.6.x:https://github.com/ricardovaleriano/jquery.hotkeys

4> Eran Medan..:

这个在Chrome上为我工作...出于某种原因为我event.which返回一个大写字母S(83),不知道为什么(不管大写锁定状态)所以我使用了fromCharCode,toLowerCase只是为了安全起见

$(document).keydown(function(event) {

    //19 for Mac Command+S
    if (!( String.fromCharCode(event.which).toLowerCase() == 's' && event.ctrlKey) && !(event.which == 19)) return true;

    alert("Ctrl-s pressed");

    event.preventDefault();
    return false;
});

如果有人知道为什么我得到83而不是115,我会很高兴听到,如果有人在其他浏览器上测试这个,我会很高兴听到它是否有效



5> Alan Bellows..:

这个jQuery解决方案适用于Chrome和Firefox,适用于Ctrl+ SCmd+ S.

$(document).keydown(function(e) {

    var key = undefined;
    var possible = [ e.key, e.keyIdentifier, e.keyCode, e.which ];

    while (key === undefined && possible.length > 0)
    {
        key = possible.pop();
    }

    if (key && (key == '115' || key == '83' ) && (e.ctrlKey || e.metaKey) && !(e.altKey))
    {
        e.preventDefault();
        alert("Ctrl-s pressed");
        return false;
    }
    return true;
}); 



6> uadrive..:

我结合了一些选项来支持FireFox,IE和Chrome.我也更新了它以更好地支持mac

// simply disables save event for chrome
$(window).keypress(function (event) {
    if (!(event.which == 115 && (navigator.platform.match("Mac") ? event.metaKey : event.ctrlKey)) && !(event.which == 19)) return true;
    event.preventDefault();
    return false;
});

// used to process the cmd+s and ctrl+s events
$(document).keydown(function (event) {
     if (event.which == 83 && (navigator.platform.match("Mac") ? event.metaKey : event.ctrlKey)) {
        event.preventDefault();
        save(event);
        return false;
     }
});



7> Eevee..:

老实说,我希望Web应用程序不会覆盖我的默认快捷键. Ctrl+ S已经在浏览器中做了些什么.根据我正在观看的网站突然改变这种情况是破坏性和令人沮丧的,更不用说经常出现问题了.我有网站劫持Ctrl+,Tab因为它看起来和Ctrl+ 相同I,都破坏了我在网站上的工作,并阻止我像往常一样切换标签.

如果需要快捷键,请使用该accesskey属性.请不要破坏现有的浏览器功能.


是的,但CTRL + S不是常用的功能.我怀疑人们会想念它,特别是如果它意味着你可以将文件保存在你的webapp中.
我通常同意你的意见,但我唯一一次在浏览器中使用ctrl-s就是当我忘记我正在使用webapp并期望快捷方式做一些有用的事情.我通常很失望.当你点击ctrl-s时Gmail会保存你的电子邮件,虽然你从来没有注意到,因为它只是按照你的预期,以及每个桌面应用程序的功能,你都没有注意到.你注意到它认为你想把gmail保存为HTML,这很烦人.
这实际上取决于应用程序.我正在构建一个终端模拟器Web应用程序,如果没有必要,覆盖ctrl + c似乎很实用.
我完全同意,但不幸的是,我是peon实施,而不是决策者.
推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有