2011-01-05 5 views
42

私が作っているウェブサイトでショートカットを作成しようとしています。jquery:keypress、ctrl + c(またはそのようなコンボ)

if(e.which == 17) isCtrl=true; 
if(e.which == 83 && isCtrl == true) { 
    alert('CTRL+S COMBO WAS PRESSED!') 
    //run code for CTRL+S -- ie, save! 
    e.preventDefault(); 
} 

しかし、以下の例では、より簡単に、より少ないコードであるが、それはコンボKeyPressイベントではありません:私は、私はそれをこの方法で行うことができます知っている

$(document).keypress("c",function() { 
    alert("Just C was pressed.."); 
}); 

は、だから私は、この第二を使用してかどうかを知りたいですたとえば、次のようなことができます:

$(document).keypress("ctrl+c",function() { 
    alert("Ctrl+C was pressed!!"); 
}); 

これは可能ですか?私はそれを試して、それは動作しませんでした、何が間違っている。

答えて

69

別のアプローチ(ないプラグインは必要ありません)それだけで渡されるevent object.ctrlKeyプロパティを使用するには、Ctrlは、次のように、イベントの時に押されたどうかは示しています。

あなたがjで はCtrl + Cを使用することはできません
$(document).keypress("c",function(e) { 
    if(e.ctrlKey) 
    alert("Ctrl+C was pressed!!"); 
}); 
+0

しかし、そこには何もありません: '.keypress(" c + s "、'私は何かをするでしょうか?そしてあなたのコードで私は正確に同じ時刻にそれらを押す必要があります。 1つのキーを押して別のキーを押して、私は本当にちょうど私が特定のキーのコンボを押すと、ポップアップメニューを作成しているので、 –

+4

@ android.nick - jQueryコアに組み込まれていない、いいえ、* that *のプラグインが必要ですが、ctrl、alt、shiftキーには '.ctrlKey'を使うだけです。 '.altKey'と' .shiftKey'のプロパティ。 –

+0

このコードはIE8で動作しません。 – ravi404

5

代わりにJquery Hotkeysプラグインをお試しください。必要なものはすべて実行します。

jQueryのホットキーは、プラグインで、あなたが簡単に、ほぼすべてのキーの組み合わせをサポートしてどこでもあなたのコード で キーボードイベントのハンドラを追加および削除することができます です。

このプラグインはTzuryバーYochayによってプラグイン のオフに基づいています。次のようにjQuery.hotkeys

が構文は次のとおりです。

$(expression).bind(types, keys, handler); $(expression).unbind(types, handler); 

$(document).bind('keydown', 'ctrl+a', fn); 

// e.g. replace '$' sign with 'EUR' 
// $('input.foo').bind('keyup', '$', function(){ 
//  this.value = this.value.replace('$', 'EUR'); }); 
+2

+1、または任意の他の予め定義されたホットキーの組み合わせを含む。取り扱い注意。 –

+0

@Pekka良い点 – Andy

+0

が合意した、それはちょうど例だった、私は実際にマウスカーソルによってポップアップするメニューのための最もよいキーコンボを理解しようとしている。 –

1

「ホットキー」と呼ばれるのjQueryのプラグインがありますキーダウンの組み合わせにバインドすることができます。

これはあなたの後のことですか?

Jquery HotKeys - Google Code

+0

プラグインは、私が必要とするもの、特に4.4kbでのシンプルさのために一種の過剰なものです。 –

1
<script src="http://code.jquery.com/jquery-latest.js"></script> 
<script type='text/javascript'> 
    var ctrlMode = false; // if true the ctrl key is down 
    ///this works 
    $(document).keydown(function(e){ 
    if(e.ctrlKey){ 
     ctrlMode = true; 
    }; 
    }); 
    $(document).keyup(function(e){ 
    ctrlMode = false; 
    }); 
</script> 
+1

このコードがなぜ機能するのかを説明するためにナラティブを追加することを検討してください。 –

+0

私のテストから、IE8はいくつかの*特殊キー(Ctrl-C-いいえ、Ctrl + X、V-はい)のために押されなかったようです。 keydown *が渡されているのに対し、この答えは機能します。 –

3

クエリが、あなたはshortcut.js

ライブデモで別のライブラリにすることができます Abdennour JSFiddle

$(document).ready(function() { 
shortcut.add("Ctrl+C", function() { 
    $('span').html("أحسنت. لقد ضغطت على حرفي : Ctrl+C"); 
     }); 
    shortcut.add("Ctrl+V", function() { 
    $('span').html("أحسنت. لقد ضغطت على حرفي : Ctrl+V"); 
     }); 
     shortcut.add("Ctrl+X", function() { 
    $('span').html("أحسنت. لقد ضغطت على حرفي : Ctrl+X"); 
     }); 


}); 
29

私は遅れて相手に少しだが、ここで私の部分がで

$(document).on('keydown', function (e) { 
    // You may replace `c` with whatever key you want 
    if ((e.metaKey || e.ctrlKey) && (String.fromCharCode(e.which).toLowerCase() === 'c')) { 
     console.log("You pressed CTRL + C"); 
    } 
}); 
+6

これはjQuery 1.11.2を使用して私にとって役立ちました。受け入れられた答えはしませんでした。 – sarme

+2

合意このメソッドは、より新しいバージョンのjQueryで動作します – asherrard

+2

Macの⌘はe.metaKeyですので、 '(e.metaKey || e.ctrlKey)&& ...'は私のために働いた – kevnk

0

です私の場合、私はkeydown ctrlキーとクリックイベントを探していました。 「linkAccessは」私はリンクを持っていると私は、キーの私の組み合わせを使用してアクセスし、クリックしますいくつかの特定のフィールドのためのクラス名です

$('.linkAccess').click(function (event) { 
    if(true === event.ctrlKey) { 

    /* Extract the value */ 
    var $link = $('.linkAccess'); 
    var value = $link.val(); 

    /* Verified if the link is not null */ 
    if('' !== value){ 
     window.open(value); 
    } 
    } 
}); 

: 私のjqueryのは、このようになります。

0

私はそれが.keypress()で動作するように得ることができなかったが、それはこのような.keydown()関数で働いていた:それはしかしCtrlキー+ Cをバインドすることをお勧めしません

$(document).keydown(function(e) { 
    if(e.key == "c" && e.ctrlKey) { 
     console.log('ctrl+c was pressed'); 
    } 
}); 
関連する問題