ユーザーがヒットできるようにしたい Ctrl+S フォームを保存します。クロスブラウザをキャプチャする良い方法はありますか Ctrl+S キーの組み合わせとフォームの送信
アプリはDrupal上に構築されているため、jQueryを使用できます。
$(window).keypress(function(event) {
if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true;
alert("Ctrl-S pressed");
event.preventDefault();
return false;
});
キーコードはブラウザ間で異なる可能性があるため、115以上を確認する必要がある場合があります。
これは私にとって(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;
}
}
});
ショートカットライブラリ を使用して、ブラウザ固有のものを処理できます。
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;
});
これは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;
});
8でなく115になる理由を誰かが知っているなら、私は聞いてうれしいです、誰かが他のブラウザでこれをテストしてもうまくいくかどうか聞いてうれしいですか否か
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 Reader、および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を送信します。最新のすべてのブラウザで動作します。
この小さなプラグイン が好きです。ただし、ブラウザ間の使いやすさがもう少し必要です。
これは機能するはずです( 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;
}
});
Alan Bellowsの回答:!(e.altKey)を使用するユーザーに追加 AltGr 入力するとき(例:ポーランド)。このプレスなしで 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、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;
});
例:
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/#
すなわちの問題を解決しました。デフォルトの動作を防ぐために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;
}
}
});