0

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

条件付きcharCodepreventDefault問題に対してここで提供されるソリューションを使用しています。

何らかの理由で、関数の上書きが実行されないだけで、問題に指を置くことができません。過去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 );
    }
})();
4

1 に答える 1

1

ソリューションの問題は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) {});
于 2011-01-04T20:51:19.993 に答える