jQuery - 从live()更改为on()

时间:2012-05-05 22:21:04

标签: jquery methods live

我有以下代码,并希望从使用live()方法更改为使用on()方法:

$('.commenttext').live('keydown', function(e) {
    if ((e.which == 13) && !e.shiftKey) {
        comment($(this));
        return false;
    }
});

关于帖子的评论 - 也是使用on()方法动态创建的帖子。如果我只是简单地将“live”改为“on”,就像这样

$('.commenttext').on('keydown', function(e) {
    if ((e.which == 13) && !e.shiftKey) {
        comment($(this));
        return false;
    }
});

然后它只适用于未动态创建的项目。

更新1

我将代码更改为以下内容:

$('.commentsDiv').on('keydown', '.commenttext', function(e) {
    if ((e.which == 13) && !e.shiftKey) {
        comment($(this));
        return false;
    }
});

commentsDiv是commenttext的父元素,但它仍不适用于动态创建的元素。例如,以下函数动态创建commentsDiv:

$('#postDiv').on('keydown', '#posttext', function(e) {
    if (e.which==13 && !e.shiftKey) {
        post($(this));
        return false;
    }
});

有谁知道如何正确调整?

谢谢:)

4 个答案:

答案 0 :(得分:2)

live表单实际上是使用document的委托,因此新格式为:

$(document).on('keydown', '.commenttext', function...);

通常情况下,最好使用选择器的较近的一致父级(在本例中为.commenttext),但不会随内容发生变化,但document应适用于大多数情况。

答案 1 :(得分:2)

您需要将回调附加到.commenttext的静态父级。页面加载时存在静态意味着。

示例:

$('body').on('keydown', '.commenttext', function(e) {
    if ((e.which == 13) && !e.shiftKey) {
        comment($(this));
        return false;
    }
});

或者:

$('{staticParentElement}').on('keydown', '.commenttext', function(e) {
    if ((e.which == 13) && !e.shiftKey) {
        comment($(this));
        return false;
    }
});

答案 2 :(得分:1)

您可以使用最近的 static 父元素作为事件持有者。但是,您也可以使用body

$('body').on('keydown', '.commenttext', function(e) {
    if ((e.which == 13) && !e.shiftKey) {
        comment($(this));
        return false;
    }
});

答案 3 :(得分:1)

$('parentElement').on('keydown', '.commenttext', function(e) {
    if ((e.which == 13) && !e.shiftKey) {
        comment($(this));
        return false;
    }
});

将“parentElement”替换为.commenttext的父元素。