Проблема с вашим решением состоит в том, что 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) {});