我有以下代码,希望从使用live()方法改为使用on()方法:
$('.commenttext').live('keydown', function(e) {
if ((e.which == 13) && !e.shiftKey) {
comment($(this));
return false;
}
});它是关于评论一个post -也是一个使用on()方法动态创建的post。如果我只是简单地将"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是注释文本的父元素,但它仍然不能处理动态创建的元素。例如,以下函数动态创建commentsDiv:
$('#postDiv').on('keydown', '#posttext', function(e) {
if (e.which==13 && !e.shiftKey) {
post($(this));
return false;
}
});有没有人知道如何正确调整?
谢谢:)
发布于 2012-05-06 06:32:48
您需要将回调附加到.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;
}
});发布于 2012-05-06 06:23:16
live表单实际上是一个使用document的委托,因此新格式为:
$(document).on('keydown', '.commenttext', function...);通常,最好使用不随内容变化的选择器(在本例中为.commenttext)的更一致的父函数,但document应该适用于大多数情况。
发布于 2012-05-06 06:22:35
您可以使用最近的静态父元素作为事件持有者。但是,您也可以使用body
$('body').on('keydown', '.commenttext', function(e) {
if ((e.which == 13) && !e.shiftKey) {
comment($(this));
return false;
}
});https://stackoverflow.com/questions/10466465
复制相似问题