2011-09-27 66 views
4

我正在構建一個通過Ajax插入新帖子的流(類似於Facebook牆)。使用.live()使jQuery插件影響通過Ajax添加的新元素

我還使用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

您正在使用哪個linkify插件?這個https://github.com/uudashr/jquery-linkify或https://github.com/errumm/Linkify或http://code.google.com/p/jquery-linkify/ :) –

+1

這一個:http ://github.com/maranomynet/linkify/ - 效果很好 – pepe

回答

1

插入行$('.main_container').linkify();到您的Ajax調用成功功能...

如:

$.ajax({ 
    url: "test.html", 
    context: document.body, 
    success: function(result){ 
    //Your functions here 
    $('.main_container').linkify(); 
    } 
}); 

這確保了linkify函數被調用後新的內容被添加到頁面,影響新帖:)

** 編輯:剛剛澄清,linkify應該叫兩次,一次在頁面加載,然後在阿賈克斯成功:)

一次
+0

很好,完美的作品 - thx很多 – pepe

+0

不用擔心:)很高興它解決了你的問題:) –

1

沒有,.live()是用於將事件處理程序。您將需要在您的ajax成功處理程序中處理新數據。

1

您可以自行升級linkify source code並使用.live()而不是.click()和linkify中使用的其他事件綁定。很少需要更改代碼。就像這樣:

行239: $(this).click(function()... ==>$(this).live('click', function()...

相關問題