我有以下代码,想从使用 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;
}
});
有谁知道如何正确调整?
谢谢:)
将回调附加到 .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;
}
});
live
形式实际上是使用 document
的委托,因此新格式将是:
$(document).on('keydown', '.commenttext', function...);
通常,最好使用选择器的更近一致的父级(在本例中为 .commenttext
),该父级不会随内容而更改,但在大多数情况下document
应该有效。
$('parentElement').on('keydown', '.commenttext', function(e) {
if ((e.which == 13) && !e.shiftKey) {
comment($(this));
return false;
}
});
将"parentElement"替换为 .commenttext 的父元素。
您可以使用最近的静态父元素作为事件持有者。但是,您也可以使用body
:
$('body').on('keydown', '.commenttext', function(e) {
if ((e.which == 13) && !e.shiftKey) {
comment($(this));
return false;
}
});