10

我正在使用 jQuerylive()函数来检测用户何时按下一些特殊键(箭头等):

$('.TextBox1').live('keydown', function(e) {
    var keyCode = e.keyCode || e.which;
    if (keyCode == 40) {
        e.preventDefault();
        // ...
    }
});

它工作了几个月,但昨天突然停止工作,阻止它下面的每一行 JS 代码执行。我试图用.keyup函数替换它,但这没有帮助。可能发生了什么?

4

12 回答 12

28

我假设您已经更新到最新版本的 jQuery?live()自 jQ1.7 以来已被弃用,现在从 1.9 中删除。

相反,您应该使用on()委托参数:

$(document).on('keydown', '.TextBox1', function(e) {
    var keyCode = e.keyCode || e.which;

    if (keyCode == 40) {
        e.preventDefault();
        //...
    }
});

请注意,为了获得最佳性能,您应该document在上面的示例中将其替换为最近的父元素,.TextBox1该父元素在页面加载后不会动态附加到 DOM。

于 2013-01-31T14:25:13.203 回答
3

jQuery .live 已弃用。虽然不完全相同,但使用 .on() 对于您的示例,它看起来像:

$('body').on('keydown', '.TextBox1', function() {
    var keyCode = e.keyCode || e.which;
    if (keyCode == 40) {
        e.preventDefault();
        ...
    }
}
于 2013-01-31T14:26:18.813 回答
3

.live()在 jQuery 1.9 之后被删除。

你必须.on从现在开始使用。

于 2013-02-05T20:41:40.410 回答
2

.live 在 jQuery 1.9 中被删除。如果您正在调用最新版本的 jQuery,它将中断。

更改您的代码以使用 .on

于 2013-01-31T14:25:11.883 回答
2

.live()在最新版本的 jQuery 1.9 中被删除。

您可以改用jQuery Migrate 插件,或更改代码以使用.on.

于 2013-01-31T14:33:55.957 回答
1

按照 jquery 网站上的说明使用它。对于您的示例,它将是

$(document).on( "keydown", ".TextBox1", function() { });

于 2014-03-10T22:02:37.037 回答
0

从 jQuery 1.7 开始,不推荐使用 .live() 方法。使用 .on() 附加事件处理程序。旧版本 jQuery 的用户应该使用 .delegate() 而不是 .live()。

阅读此内容以获取有关直播的更多信息

于 2013-01-31T14:25:38.460 回答
0

live 实际上已在 jq 1.9 上被删除,而不仅仅是被弃用!您可以使用插件来实现兼容性或将代码更新为 on

于 2013-01-31T14:27:32.617 回答
0

.live()在 jq 1.9 中已弃用,所以你可以试试这个

$('.TextBox1').on('keydown', function() {
    var keyCode = e.keyCode || e.which;
    if (keyCode == 40) {
        e.preventDefault();
        ...
    }
}
于 2013-01-31T14:35:44.530 回答
0

您是否已将 jquery 更新到 1.7?

从 jQuery 1.7 开始,不推荐使用 .live() 方法。

使用 .on() 附加事件处理程序:

$('.TextBox1').on('keydown', text_box_key_down_function);

您还可以使用绑定:

$('.TextBox1').bind('keydown',text_box_key_down_function);
于 2013-01-31T14:43:36.237 回答
0

.live 在 JQ 1.9 发布时被删除,所以我猜你已经将 Jquery 更新到了最新版本。

现在,尝试:

$('.TextBox1').on('keydown', function() {
    var keyCode = e.keyCode || e.which;
    if (keyCode == 40) {
        e.preventDefault();
        ...
    }
}
于 2013-01-31T15:04:37.817 回答
0

.live 在 JQ 1.9 时被删除,但现在有同时运行 .live 和 .on 的解决方案

<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>

更多关于 Jquery 迁移

来自stackoverflow的羽毛信息

于 2014-06-16T08:48:20.807 回答