2016-08-29 53 views
0

在Chrome趕上Cmd的-S,我想抓住這兩個按Ctrl - 小號Cmd的 - 小號對我的web應用程序的跨操作系統兼容性的瀏覽器。我看到一個關於如何做到這一點這裏螺紋:jquery keypress event for cmd+s AND ctrl+s不能在Mac

我在下面的代碼片斷:

$(document).keypress(function(event) { 
    if (event.which == 115 && (event.ctrlKey||event.metaKey)|| (event.which == 19)) { 
    event.preventDefault(); 
    save(); 
    return false; 
    } 
    return true; 
}); 

其中save()是一個JavaScript函數,將發送對未來的AJAX請求,而只是現在有alert('Saved!');

然而,儘管這種捕捉按Ctrl - 小號,它並沒有趕上Cmd的 - 小號在Chrome,而不是隻打開保存網頁對話框像往常一樣。我看到該網頁上的其他人也遇到同樣的問題,但我沒有看到解決方案。

在此先感謝!

+0

另外要注意,'不參加任何正式規範的按鍵事件,使用時可能會遇到的跨瀏覽器,瀏覽器版本,並platforms.'不同的實際行爲(從官方[jQuery doc for'keypress'](https://api.jquery.com/keypress/))。你可能要考慮不使用'keypress'。 – filoxo

+0

@filoxo謝謝你讓我知道:) –

回答

0

我覺得按鍵,因爲你有它沒有註冊metakeys在相同的方式,請參閱:Diffrence between keyup keydown keypress and input events這裏是一個小提琴,似乎使用keydown,然後捕獲每個順序。希望能幫助到你?

var metaflag = false; 
 

 
$(document).on({ 
 
\t keydown: function(event) { 
 
    if (event.ctrlKey||event.metaKey || event.which === 19) { 
 
     event.preventDefault(); 
 
     $('.monitor').text('key '+event.which); 
 
     metaflag = true; 
 
    } 
 
    \t if(metaflag && event.which === 83){ // 83 = s? 
 
     event.preventDefault(); // maybe not necessary 
 
     $('.display').text('saving?'); 
 
     metaflag = false; 
 
    } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class='monitor'></div> 
 
<div class='display'></div>

+0

這完美的作品。謝謝! :d –