Jquery现场功能突然不起作用了

时间:2013-01-31 14:23:35

标签: javascript jquery

我使用jQuery live()函数来检测用户何时按某些特殊键(箭头等):

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

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

12 个答案:

答案 0 :(得分:27)

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

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

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

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

在jQuery 1.9之后删除了

.live()

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

答案 3 :(得分:2)

在最新版本的jQuery 1.9中删除了

.live()

您可以改为使用jQuery Migrate plugin,或更改代码以使用.on

答案 4 :(得分:1)

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

更改您的代码以使用.on

答案 5 :(得分:0)

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

阅读本文,了解有关live

的更多信息

答案 6 :(得分:0)

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

答案 7 :(得分:0)

jq 1.9中已弃用

.live(),因此您可以尝试此操作

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

答案 8 :(得分:0)

您是否已将jquery更新为1.7?

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

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

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

您也可以使用bind:

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

答案 9 :(得分:0)

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

现在,试试:

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

答案 10 :(得分:0)

使用jquery网站上提到的这个。 对于你的例子,它将是

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

答案 11 :(得分:0)

在JQ 1.9中删除了.live但现在有了同时运行.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>

More about Jquery migrate

Feather information from stackoverflow