Вопрос

Я пытаюсь перезаписать основное событие jQuery, в этом случае keydown мероприятие. Я намерен preventDefault() функциональность Left(37), Up(38), Right(39) а также Down(40) Поддерживать последовательность горячих ключей в моем веб -приложении.

Я использую предоставленное решение здесь Для условной проблемы предотвращения 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