0

ユーザーがホットキーを動的に定義してトリガーできるようにしたいという私が取り組んでいるWebアプリがあります。誰かが私を助けてくれることを願っていますか?

関連する HTML を使用してJSFiddle HEREを作成しました。

これが私のJavaScriptです:

// Assign Hotkey (this seems to be working)
$('input.hotkey').keydown( function(event) {
var hkey = event.keyCode;
if ( hkey == $('span#hk').text()){
    alert('This key is already in use');
} else
    $(this).parent().parent().prev().find('span#hk').text(hkey);
});

// Fire Hotkey (the problem might be here?)
$(document).not('input').keydown( function (event) {
    var hkey = event.keyCode;
    if (hkey == $('span#hk').text()){
         $("span#hk:contains("+hkey+")").parent().click();
    }
});

// Play Selected Track
$('#track').live('click', function () {
    // Fake Function
    var title = $('#title', this).text();
    alert(title + ' is playing...');
});

注: 'space' と 'left/right' 矢印キーをグローバル ホットキーとして既に使用しています。それらを保護/割り当てられないようにする方法はありますか?

入力の入力中にトラックが起動するのを防ぐために .not('input') よりも使用するのに適したセレクターはありますか?

助けてくれてありがとう!

4

1 に答える 1

2

$(document).not('input')inputタグではないすべての要素を見つけるわけではありません。入力要素ではないすべてのドキュメント ノード (そのうちの 1 つ) (すべてがそれらの 1 つ) を検索します。ハンドラーを にアタッチしただけdocumentです。親要素はその子孫でトリガーされたイベントを通知されるため、すべてのkeydownイベントはこの関数によって処理されます。

event.target代わりに以下を使用する必要があります。

$(document).keydown( function (event) {
    if (event.target.nodeName.toLowerCase() !== 'input') {
        var hkey = event.keyCode;
        if (hkey == $('span#hk').text()){
            $("span#hk:contains("+hkey+")").parent().click();
        }
    }
});

このifステートメントは、イベントが要素で発生した場合、ハンドラーは何もしないことを意味しinputます。

于 2011-05-14T09:26:39.710 に答える