質問

この場合、コアJQueryイベントを上書きしようとしています。 keydown イベント。私の意図はそうです preventDefault() の機能 Left(37), Up(38), Right(39)Down(40) 私のWebアプリケーションでホットキーの一貫性を維持するため。

提供されたソリューションを使用しています ここ 条件付きcharcodeの場合、防止の問題の問題。

何らかの理由で、私の関数の上書きは単に発射されておらず、問題に指を置くことはできません。過去30分間で、この問題が脱毛をもたらしたのではないかと心配しています。誰かが治療法を持っていますか?

/* 
Modify Keydown Event to prevent default PageDown and PageUp functionality
*/
(function(){
    var charCodes = new Array(37,38,39,40);
    var original = jQuery.fn.keydown;

    jQuery.fn.keydown = function(e){
        var key=e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
        alert('now why is my keydown mod not firing?');
        if($.inArray(key,charCodes))
        {
          alert('is one of them, do not scroll page');
          e.preventDefault();
          return false;
        }
        original.apply( this, arguments );
    }
})();
役に立ちましたか?

解決

解決策の問題はそれです keydown それが議論としてイベントを受け入れないので、何が起こっているのかというメンタルモデルは間違っています。イベントがどのように作成されるかはおそらく複雑なので、使用するプラグインを書くだけではなぜ keydown そして、それに基づいて、特定のコールバックの前にロジックをスロットインします。

(function($){
    var charCodes = new Array(37,38,39,40);

    $.fn.limitedkeydown = function(callback) {
        this.keydown(function(e) {
            if ($.inArray(e.keyCode, charCodes))
                e.preventDefault();
            callback(e);
        });
    };
})(jQuery);

そうすれば、オリジナルの(手つかずの)バージョンがまだ利用可能であるため、両方の方法を等しく使用できます。

$('selector').keydown(function(e) {});
$('selector').limitedkeydown(function(e) {});
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top