我对jQuery的live()函数有疑问。
我正在编写一个论坛。一旦有人发布了某些内容并且点击了输入,jQuery会附加其他帖子,并为注释插入一个textarea,以下事件处理程序适用于:
//Comment on a post
$('.commenttext').keyup(function(e) {
if (((e.keyCode || e.which) == 13) && !event.shiftKey) {
comment($(this));
}
});
然后调用发表评论的功能 - 至少它应该是。对于旧帖子,它可以正常工作,但不适用于刚发布和附加的帖子。
我知道可以使用live()函数保留功能。但是,正如您所看到的,在点击输入时提交帖子,没有涉及按钮。所以我想知道如何组合这些东西,即使用live()但没有点击:?
仅供参考,发布内容的功能如下:
//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的父元素,它是注释textarea。我需要用id来解决它吗?
谢谢:)
答案 0 :(得分:2)
.live
可以用于您想要的任何事件,而不仅仅是click
(甚至是自定义事件)。
$('.commenttext').live('keyup', function(e) {
if (e.which == 13 && !event.shiftKey) {
comment($(this));
}
});
注意:如果您使用的是jQuery 1.7+,则不应再使用.live
,而应使用.on
代替。
$(document).on('keyup', '.commenttext', function(e) {
if (e.which == 13) && !event.shiftKey) {
comment($(this));
}
});
而不是document
,你应该使用最接近的父元素(不需要从DOM中删除这个元素,如果它被移除,事件也会被移除)。
P.S。 e.which
在jQuery中被标准化,这意味着它为您e.keyCode || e.which
。
答案 1 :(得分:0)
未经测试,但我怀疑......应该......工作吗?
$('.commenttext').live('keyup', function(e) {
if (((e.keyCode || e.which) == 13) && !event.shiftKey) {
comment($(this));
}
});