0

我目前正在构建的社交网络上有一个墙发布系统,它使用 jQuery 和 Ajax 将消息发布到墙上,然后 php 将其保存到数据库中。帖子出现在墙上后,会有“评论”和“点赞”链接。单击“评论”链接时,我试图关闭评论框,但是我似乎无法使用 javascript 访问该元素。

这是显示墙贴的代码:

var wall_post = '<li><div class="user_activity_feed_item_user_pic"><img src="images/temp/prof_pic_temp.jpg" class="avatar"></div><div class="user_activity_feed_item_title"><a href="proflie-view.php">Tyler Bailey</a></div> <div class="user_activity_feed_item_content"><p class="activity_feed_text">' + textarea_content + '</p> ' + image_html + '<div class="data"><p class="name"><a href="' + siteurl + '" target="_blank">' + sitetitle + '</a></p><p class="caption">' + siteurl + '</p><p class="description">' + sitedesc + '</p></div><div class="user_activity_feed_item_comment_bar"><ul> <li class="activity_feed_timestamp">July 16, 2012 2:08pm</li> <li><a id="comment" href="#">Comment</a></li><li><a id="like" href="#like_view">Like</a></li></ul></div></div></li>';

这是我试图用来访问的代码<a id="comment" href="#">

 //initiate comment box for status feeds
$(document).ready(function(){
    $('#comment_wrapper').hide();

    $('a#comment').click(function(){
        $('#comment_wrapper').show();
    });
});

任何关于如何使这项工作的想法或提示将不胜感激!

4

3 回答 3

3

只需使用事件委托,on()例如:

var listEl = $('ul'); // parent of the newly added li element
listEl.on('click', 'a', function(e){
    e.preventDefault();
    // do something in response to a click on a link from within
    // the newly-added content.
});

JS 小提琴演示

要记住的重要一点是,您绑定或分配或委托on()方法的元素在绑定/分配时必须存在于 DOM 中。因此,使用 DOMReady 或 onLoad 文档中存在的新添加元素的最近父元素。

于 2012-08-01T19:36:29.547 回答
1

您可以使用ondelegate如果您使用的是旧版本的 jQuery,则可以使用)来监听喜欢或评论按钮上的所有点击事件:

var comment_wrapper = $("#comment_wrapper");
comment_wrapper.hide();

$(document).on("click", ".comment", function() {
    comment_wrapper.show();
});

不要使用live,除非您使用的是旧版本的 jQuery,它不为您提供onor delegate。如果我没记错的话,它是bind用于侦听来自多个元素的事件的事件侦听器(除了方法之外)效率最低的。

此外,如果页面上将有多个具有 ID 的元素,则不要使用 ID - ID 需要在整个文档中是唯一的。

于 2012-08-01T19:37:54.697 回答
0

由于链接是动态生成的,因此使用 live()

$('a#comment').live("click", function(event){

//your
//actions here


});
于 2012-08-01T19:37:34.260 回答