2012-06-25 109 views
3

我使用AJAX加載了我的網頁的一部分,特別是jQuery.load()。有了這個通常的jQuery模式初始化jQuery.load'ed元素

$('.classname').click(...) // Handler 
// or, working with bootstrap 
$("a[rel=tooltip]").tooltip() // Function 

或類似顯然不再工作,因爲它們僅在頁面加載時調用。我意識到第一個例子中有jQuery.on,但是我將如何實現第二個例子?

是否有一個簡單的(內置)方式也適用於這些jQuery.load編輯的東西,還是我必須自己解決它?看起來像很多人應該遇到的問題。

回答

1

你必須自己解決它;但你可以很容易地對這個在回調調用$("a[rel=tooltip]").tooltip()load()

$('#blah').load('/somewhere.html', function() { 
    $('#blah').find('a[rel="tooltip"]').tooltip(); 
}); 

一定要限制tooltip()調用只新加載的元素,或者你最終會初始化每個元素提示多次(其中可能導致怪異的行爲)。


爲避免重複代碼,您只需要定義一個輔助函數;

function initTooltip(root) { 
    return $(root || document).find('a[rel="tooltip"]').tooltip(); 
} 

它允許你初始化tooltip。該參數是可選的,可以限制初始化提供的元素的唯一後代,如:

jQuery(document).ready(function ($) { 
    initTooltip(); // equivilant to initTooltip(document); 

    $('#blah').load('/somewhere.html', function() { 
     initTooltip('#blah'); 
    }); 
}); 
+2

'$(「一[相對=提示]」)提示()'看起來像Twitter的引導提示插件,如果工具提示已經在給定元素上實例化,則這是一個noop。 :P – Esailija

+0

@Esailija:啊,很高興知道:)。謝謝! – Matt

+0

如何解決重複代碼(一次在document.load中,一次在代碼示例中)? –