我正在构建一个通过Ajax插入新帖子的流(类似于Facebook墙)。
我还使用jQuery插件Linkify将任何链接字符串转换为可点击元素。
当用户输入链接时,帖子会立即显示在页面上(通过Ajax),但Linkify不会影响,因为它不是在DOM中开始的。当我重新加载页面时,链接可以点击。
有没有办法使用.live()
使插件影响ajax添加的未来DOM元素?
一些代码:
//-------------Linkify
$('.main_container').linkify();
//-------------stream page structure
<div class="main_container">
<div class="posts_insert">
// target to be replaced via ajax
</div>
<div class="posts">
// text of post #1
</div>
<div class="posts">
// text of post #2
</div>
<div class="posts">
// text of post #3
</div>
</div>
//----------post structure, will replace .posts_insert above
<div class="posts_insert">
// text of post #1
</div>
<div class="posts">
// html
</div>
答案 0 :(得分:1)
不,.live()用于附加事件处理程序。您需要在ajax成功处理程序中处理新数据。
答案 1 :(得分:1)
将行$('.main_container').linkify();
插入到ajax调用的成功函数中......
例如:
$.ajax({
url: "test.html",
context: document.body,
success: function(result){
//Your functions here
$('.main_container').linkify();
}
});
这确保在将新内容添加到页面后调用linkify函数,从而影响新帖子:)
** 编辑:只是澄清一下,linkify应该被调用两次,一次在页面加载,然后一次在ajax上成功:)
答案 2 :(得分:1)
您可以自行升级linkify source code并使用.live()
代替.click()
以及linkify中使用的其他事件绑定。几乎没有代码更改。就像这个:
第239行:
$(this).click(function()...
==&gt; $(this).live('click', function()...