網站搜尋

javascript - 使用 JQuery 捕捉 CTRL+S 的最佳跨瀏覽器方法?


我的用戶希望能夠按下 Ctrl+S 來保存表單。是否有一種好的跨瀏覽器方法來捕捉 Ctrl+S 鍵組合並提交我的表單?

應用程式是建立在 Drupal 上,因此可以使用 jQuery。

答案#1

這對我有效(使用 jquery)來覆寫 Ctrl+S、Ctrl+F 和 Ctrl+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;
        }
    }
});

答案#2

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

按鍵代碼在不同瀏覽器之間可能不同,因此你可能需要檢查的不僅僅是115。

答案#3

你可以使用快捷方式庫來處理特定瀏覽器的問題。

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

答案#4

這個 jQuery 解決方案在 Chrome 和 Firefox 中對我有效,對於 Ctrl+S 和 Cmd+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;
}); 

答案#5

這個對我在 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,我會很高興聽到,同時如果有人在其他瀏覽器上測試過,我也會很高興知道它是否可行