使用.live()来生成jQuery插件会影响通过Ajax添加的新元素

时间:2011-09-27 03:31:42

标签: javascript jquery live

我正在构建一个通过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>

3 个答案:

答案 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()...