2011-01-18 14 views
2

jresigのjqueryホットキーを使用していますが、単一のホットキーで動作するようです。問題は、データベースからのホットキーのリストがあり、それらを読み込み、ホットキーを動的に割り当てることです。だから私は、ホットキーと値のリストを持っており、これが私のJSです:jqueryホットキーの動的バインド

$(document).ready(function() { 
    var keyList = []; 

    $('.hotkey').each(function(){ 
    hotkey = $(this).attr('value'); 
    hotkey = hotkey.substring(1,hotkey.length-1); 

    myVal = $(this).next().attr('value'); 

    alert("binding " + hotkey); 

    $(document).bind('keydown', hotkey, function() { 
     alert("YOU PRESSED " + hotkey); 
     $('.chosen-category-id').attr('value', hotkey); 
     $('.chosen-category-name').attr('value', myVal); 
    }); 

    }) 
}) 

今何が起こる私はキーを押すたびに、それはちょうどそれがバインドされ、最後のホットキーを警告することです。ここに論理に何か問題はありますか?私は大量の文書を貼り付けるコピーから自分自身を保っています。私はこれを動的にやろうとしています。

EDIT

私はこれで私のコードをリファクタリング:

$(document).ready(function() { 

    var keyList = []; 
    var keyValues = []; 

    $('.hotkey').each(function(){ 
    hotkey = $(this).attr('value'); 
    hotkey = hotkey.substring(1,hotkey.length-1); 

    keyList.push(hotkey); 

    keyValues.push($(this).next().attr('value')) ; 
    }) 


    $.each(
    keyList, 
    function(index, key) { 
     $(document).bind('keydown', key, function() { 
     alert("O HAI YOU PRESSED " + key); 
     $('.chosen-category-id').attr('value', key); 
     $('.chosen-category-name').attr('value', keyValues[index]); 
     return false; 
     }); 
    } 
) 


}) 

それは、この作品と他にはない理由として機能するようになりましたが、イム好奇心。ホットキー変数は最後の繰り返しを上書きし続けますか?また、最初のコードは、この2番目のコードが2つの場合に1つのループのみを実行するので、より効率的に見えます。

+0

マークアップも使用して投稿できますか?好ましくはjsfiddle.netで? – Dogbert

+0

マークアップについて知りたいことはありますか?彼らはちょうどクラスのホットキーと "(ホットキー)"の形式で値を持つ入力ボタンがたくさんある、私は質問を編集 – corroded

+0

途中でジャークのような音には意味がない。私はちょうど正しい値を取得しているようにマークアップが関係ないと思う、問題はバインディングの割り当てだった – corroded

答えて

0

私は同様の問題がありました。私はこれでした:

$(document).bind('keypress', keyBinding, function(e) { 
    e.preventDefault(); 
    $(this).trigger("click"); 
}); 

のが、例のいくつかを読んだ後、私はにあることに変更:ちょうど私はキーバインドのVARを割り当てるあなたのような各ループ内/これらの

$(document).bind('keydown', keyBinding, function(e) { 
    $(this).trigger("click"); 
    return false; 
}); 

両方がありました「Ctrl + s」や「Ctrl +右」のようなものに変更します。興味深い部分は明らかに「キー押し」と「偽を返す」です。私は今、完璧にうまくいく。私が持っていた最初のコードはすべてのブラウザ(クロム)では動作しませんでしたが、FFで動作しました。

私が学んだもうひとつの話は、バインディングに注意する必要があるということです。いくつかのバインディングはすべてのブラウザで機能しません。たとえばCtrl + nはChrome(多分他のユーザー)では動作しません。 github siteにはテストページが含まれています。私は現地の開発現場で働かせるために彼らの1人を改装しました。私はキーコンボをテストすることができました。

関連する問題