我有一个关于 jQuery 的 live() 函数的问题。
我正在编写一个论坛。一旦有人发布内容并点击回车,jQuery 就会附加其他帖子并插入一个用于评论的文本区域,以下事件处理程序适用于该文本区域:
//Comment on a post
$('.commenttext').keyup(function(e) {
if (((e.keyCode || e.which) == 13) && !event.shiftKey) {
comment($(this));
}
});
然后调用发布评论的函数 - 至少它应该是。对于旧帖子,它可以正常工作,但不适用于刚刚发布和附加的帖子。
我知道使用 live() 函数可以保留功能。但是,如您所见,点击回车时帖子被提交,没有涉及任何按钮。所以我想知道如何结合这些东西,即使用 live() 但没有 click: ?
仅供参考,发布内容的功能如下所示:
//Function to post
function post()
{
//Get posttext and preserve line breaks
var posttext=$('#posttext').val();
//Ajax if posttext is not empty
if(posttext!="")
{
$.ajax({
//blablabla
success: function(postid){
//Prepend posts with the new post
var newpost=posttext+'<br/><textarea id="commenttext'+postid+'" class="commenttext" placeholder=" Comment..."></textarea>';
$(newpost).hide().prependTo('#postsDiv').fadeIn('slow');
}
});
}
}
更新 1:
我已更改事件处理程序以向此发布一些内容,该发布很好,但功能仍然不存在:
//Post something
$('#postDiv').on('keyup', '#posttext', function(e) {
if ((e.which == 13) && !event.shiftKey) {
post($(this));
}
});
更新 2:
它现在有效:) 我不知道comment() 和post() 都必须是实时的。我现在有以下两个功能:
//Post something
$('#postDiv').on('keyup', '#posttext', function(e) {
if ((e.which == 13) && !event.shiftKey) {
post($(this));
}
});
和
//Comment on a post
$('.commenttext').live('keyup', function(e) {
if (e.which == 13 && !event.shiftKey) {
comment($(this));
}
});
它工作正常,但最好也使用 on() 来评论。我试过这个:
$('.commentsDiv').on('keyup', '.commenttext', function(e) {
if ((e.which == 13) && !event.shiftKey) {
post($(this));
}
});
但它不起作用 - 怎么会?commentsDiv 是commenttext 的父元素,即comment textarea。我需要用id来解决吗?
谢谢 :)