0

ユーザーがコードを完全に機能させるトリガーキーを選択する簡単な方法を作成しようとしています。私はこれまでのところこれを持っています。

var triggers = {space:"32",enter:"13",tab:"9"};
var triggerKeys = ["space","enter"];

$('input').on('keypress',function(event) {
 var unicode= event.keyCode ? event.keyCode : event.which;
   if(unicode === triggers[triggerKeys]) {
       //code initiation here
   }

もちろん、これは機能しません。コードの配列が開始されるようにする方法についてのアイデアはありtriggerKeysますか?また、複数のトリガーキーがある場合はどうすればよいですか?

コードは 1 つのトリガーに対してのみ機能します。複数のトリガーキーをループする必要がありますか?

4

2 に答える 2

1

あなたが何を求めているのかわかりませんが、私は次のようなことをします:

$('input').on('keypress',function(e) {
    switch (e.which) {
        case 32: //space
            console.log('space');
            break;
        case 13: //enter
            console.log('enter');
            break;
        case 9: //tab
            console.log('tab');
    }
});

配列を別の配列のキーとして使用することは私にはうまくいかないようですか?

キーが配列に存在するかどうかを確認するだけの場合は、キーコードを保存します。

var triggerKeys = [32, 13, 9];

$('input').on('keypress',function(e) {
    if ( $.inArray(e.which, triggerKeys) != -1 ) {
       // one of the triggerkeys was pressed
    }
});

編集:

使用しているマップの別の例を次に示します。トリガー キーが押されたかどうかを確認します。

var triggerKeys = ["space","enter", "tab"];
var triggers    = {space: 32, enter: 13, tab: 9};

$('input').on('keypress',function(e) {
    var arr = $.map(triggerKeys, function(el, i) {return triggers[el];});
    if ( $.inArray( e.which, arr ) != -1 ) {
        console.log('trigger key pressed')
    }
});

フィドル

于 2013-06-09T20:20:29.167 に答える
0

変数の値に基づいてコードを実行するunicode場合は、セット内の値の存在を確認するだけで十分です。

簡単な方法は、セットに配列を使用することです

var triggerKeys = [32, 13];

次に、次のように確認します。

if (triggerKeys.indexOf(unicode) >= 0) {
    // ...
}

しかし、MDN のドキュメント indexOfによると、すべてのブラウザーにあるとは限りません。

または、次のようにセットをシミュレートします。

var triggerKeys = {32: true, 13: true};

そしてただ言う

if (unicode in triggerKeys) {
    // ...
}

編集

コードの可読性を高めるために、キー名とキー コードを定義するアプローチを続けることができます。

var triggers = {space: 32, enter: 13, tab: 9};
var triggerKeys = ["space", "enter"];

実際のトリガー キー コードは、トリガーから計算されます。

var triggers = {space:"32",enter:"13",tab:"9"};
var triggerKeys = ["space", "enter"];
var triggerKeyCodes = {};

for (var i = 0; i < triggerKeys.length; i += 1) {
    triggerKeyCodes[triggers[triggerKeys[i]]] = true;
}

これにより、triggerKeyCodesオブジェクトは のようになり{32:true, 13:true}ます。次に、次のように記述できます。

if (unicode in triggerKeyCodes) {
    // ...
}

ライブデモ: http://jsbin.com/eqoyag/5/edit

すでにjQueryを使用しているため、adeneoの回答の方が優れています。JavaScript の次のバージョンには、生の JavaScript バージョンをよりクリーンにするいくつかの優れた機能 (内包表記、マップなど) が含まれます。

于 2013-06-09T20:24:45.060 に答える