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