我有以下代码,并希望从使用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;
}
});
有谁知道如何正确调整?
谢谢:)
答案 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的父元素。