Основная проблема модификации событий jQuery
-
15-10-2019 - |
Вопрос
Я пытаюсь перезаписать основное событие 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) {});