10

ブラウザベースのアプリケーションにCTRL+機能を実装しようとしていました。S検索を行ったところ、次の 2 つのスクリプトに出くわして質問しました

JQueryでCTRL + Sをキャプチャするための最良のクロスブラウザ方法は?
Chrome の Ctrl+S preventDefault

ただし、実装しようとすると機能しましたが、デフォルトのブラウザ保存ダイアログボックス/ウィンドウが表示されます。

私のコード:用shortcut.js:

 shortcut.add("Ctrl+S",function() {
     alert("Hi there!");
 },
 {
     'type':'keydown',
     'propagate':false,
     'target':document
});

jQuery hotkeys.js:

$(document).bind('keydown', 'ctrl+s', function(e) {
    e.preventDefault();
    alert('Ctrl+S');
    return false;
});

トリックを行うべきだと思いe.preventDefault();ますが、何らかの理由で機能しません。どこが間違っているのですか.単純な場合は申し訳ありませんが、まだjJvascriptを学んでいます.

4

5 に答える 5

21

これらのライブラリは必要ありません。これを試してみてください。

$(document).on('keydown', function(e){
    if(e.ctrlKey && e.which === 83){ // Check for the Ctrl key being pressed, and if the key = [S] (83)
        console.log('Ctrl+S!');
        e.preventDefault();
        return false;
    }
});

問題は、コードが で停止し、alert()関数が保存ダイアログを中断できないことでした。

(まだjQueryを使用しています)

于 2013-01-28T12:32:46.323 に答える
17

これは、私が使用した質問に別の実装を追加することです。 SO回答から適応。また、MACでも機能します

 document.addEventListener("keydown", function(e) {
      if (e.keyCode == 83 && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey))      {
        e.preventDefault();
        //your implementation or function calls
      }
    }, false);
于 2013-01-28T13:15:25.100 に答える
1

プラグインを使用する必要はありません。以下のjqueryコードを使用するだけです。

$(document).bind('keydown', 'ctrl+s', function (e) {
        if (e.ctrlKey && (e.which == 83)) {

            e.preventDefault();
            //Your method()
            return false;
        }
    });

アラートを使用しているため、アラートで実行が停止し、アラートボックスを閉じるまで「returnfalse」は実行されません。これがデフォルトのダイアログが表示される理由です。

メソッドが長時間実行されている場合は、代わりにasynメソッドメソッドを使用することをお勧めします。

于 2013-01-28T12:34:44.243 に答える