核心jQuery事件修改问题

时间:2011-01-04 20:42:51

标签: jquery events keydown apply preventdefault

我正在尝试覆盖核心jQuery事件,在这种情况下是keydown事件。我的目的是preventDefault()Left(37)Up(38)Right(39)的{​​{1}}功能,以维护我的网络应用程序中热键的一致性。

我使用here提供的解决方案来处理条件charCode preventDefault问题。

由于某种原因,我的函数覆盖根本就没有触发,我无法解决问题。我担心在过去30分钟内这个问题导致一些脱发。有人有补救措施吗?

Down(40)

1 个答案:

答案 0 :(得分: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) {});