回答:
$(window).keypress(function(event) {
if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true;
alert("Ctrl-S pressed");
event.preventDefault();
return false;
});
キーコードはブラウザによって異なる可能性があるため、115以上のものを確認する必要がある場合があります。
keydown
代わりに使用keypress
これは私にとって(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;
}
}
});
else if
元のif
ステートメントはすでにtrueとして評価されるため、は機能しません。元のif
ステートメントの前にコードを置き、元のステートメントをに変換する必要がありelse if
ます。
ショートカットライブラリを使用して、ブラウザ固有のものを処理できます。
shortcut.add("Ctrl+S",function() {
alert("Hi there!");
});
この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;
});
e.key
代わりに使用してくださいe.which
。
この1は、何らかの理由で... 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;
});
私が115ではなく83になる理由を誰かが知っているなら、私は喜んで聞くでしょう、そして誰かが他のブラウザでこれをテストした場合、それが機能するかどうかを聞いて喜んでいます
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;
}
});
Webアプリケーションで、デフォルトのショートカットキーを正直に上書きしないようにしたいと思います。 Ctrl+はSすでにブラウザで何かをしている。私が表示しているサイトに応じて突然変更することは、しばしばバグがあることは言うまでもなく、破壊的でイライラさせられます。私はサイトが乗っ取っ持っていたCtrl+ Tabそれは同じに見えたので、Ctrl+ I両方のサイト上で自分の仕事を台無しにし、いつものようにタブを切り替えるから私を防止し、。
ショートカットキーが必要な場合は、accesskey
属性を使用します。既存のブラウザ機能を壊さないでください。
@Eevee:ブラウザーがますます豊富な機能のホームとなり、デスクトップアプリに取って代わるようになると、キーボードショートカットの使用を忘れるオプションにはなりません。Gmailの豊富で直感的なキーボードコマンドのセットは、Outlookを放棄する私の意欲に役立ちました。Todoist、Googleリーダー、Googleカレンダーのキーボードショートカットを使用すると、毎日の生活がずっと簡単になります。
開発者は、ブラウザで既に意味のあるキーストロークを上書きしないように注意する必要があります。たとえば、私が入力しているWMDテキストボックスは、不可解にCtrl+ Delを「単語を前方に削除」ではなく「ブロック引用」として解釈します。サイト開発者が使用できる「ブラウザセーフ」なショートカットの標準的なリストがどこかにあり、ブラウザが将来のバージョンでは近づかないようにすることを約束します。
$(document).keydown(function(e) {
if ((e.key == 's' || e.key == 'S' ) && (e.ctrlKey || e.metaKey))
{
e.preventDefault();
alert("Ctrl-s pressed");
return false;
}
return true;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Try pressing ctrl+s somewhere.
これは@AlanBellowsの回答の最新バージョンで、に置き換えwhich
られkey
ます。Chromeの大文字のキーグリッチでも機能します(Ctrl+ を押すSと、sではなく大文字のSが送信されます)。すべての最新のブラウザで動作します。
これは私の解決策であり、ここの他の提案よりもはるかに読みやすく、他のキーの組み合わせを簡単に含めることができ、IE、Chrome、Firefoxでテストされています。
$(window).keydown(function(evt) {
var key = String.fromCharCode(evt.keyCode);
//ctrl+s
if (key.toLowerCase() === "s" && evt.ctrlKey) {
fnToRun();
evt.preventDefault(true);
return false;
}
return true;
});
String.fromCharCode
。ただし、Macにはコントロールキーがありません。コマンドキーをテストしevt.metaKey
ます。true
MacではCmd、WindowsではWin に戻ります。
私はこの小さなプラグインが好きです。ただし、ブラウザ間の使いやすさがもう少し必要です。
これは機能するはずです(https://stackoverflow.com/a/8285722/388902から変更)。
var ctrl_down = false;
var ctrl_key = 17;
var s_key = 83;
$(document).keydown(function(e) {
if (e.keyCode == ctrl_key) ctrl_down = true;
}).keyup(function(e) {
if (e.keyCode == ctrl_key) ctrl_down = false;
});
$(document).keydown(function(e) {
if (ctrl_down && (e.keyCode == s_key)) {
alert('Ctrl-s pressed');
// Your code
return false;
}
});
例:
shortcut.add("Ctrl+c",function() {
alert('Ok...');
}
,{
'type':'keydown',
'propagate':false,
'target':document
});
使用法
<script type="text/javascript" src="js/shortcut.js"></script>
ダウンロードのリンク:http : //www.openjs.com/scripts/events/keyboard_shortcuts/#
Alan Bellowsの回答へ:AltGr入力時に使用するユーザー向けに!(e.altKey)が追加されました(例:ポーランド)。この押さずAltGr+はS同じ結果得られますCtrl+をS
$(document).keydown(function(e) {
if ((e.which == '115' || e.which == '83' ) && (e.ctrlKey || e.metaKey) && !(e.altKey))
{
e.preventDefault();
alert("Ctrl-s pressed");
return false;
}
return true; });
私が作成したこのプラグインが役立つ場合があります。
このプラグインを使用して、このように実行するキーコードと機能を提供する必要があります
simulatorControl([17,83], function(){
console.log('You have pressed Ctrl+Z');
});
コードでCtrl+の実行方法を表示しましたS。リンクに詳細なドキュメントが表示されます。プラグインは、Codepenの私のペンのJavaScriptコードセクションにあります。
IEで問題を解決し、alert("With a message")
デフォルトの動作を防ぐためにを使用しました:
window.addEventListener("keydown", function (e) {
if(e.ctrlKey || e.metaKey){
e.preventDefault(); //Good browsers
if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) { //hack for ie
alert("Please, use the print button located on the top bar");
return;
}
}
});