2014-03-25 38 views
3

我插入HTML以及一些內聯JavaScript與JQuery的html()函數。使用JQuery.html()時,內聯腳本何時執行?

似乎JQuery.html()是一個同步函數,但它並不能保證內聯腳本在繼續之前完成執行。

因此,例如:

$elem.html(some_html_with_inline_scripts); 
function_that_relies_on_inline_scripts_done_executing(); 

,因爲我的內嵌腳本函數調用後執行不工作。

有沒有辦法解決這個問題?

+0

老版本的jQuery沒有在'.html()'函數中執行腳本,因爲它本質上是'.innerHTML'的一個奇特版本。必須引入修復才能執行腳本。你最好通過'jQuery.getScript'包含腳本依賴關係。 – zzzzBov

回答

0

這對於解決方法如何?

var scripts_loaded = false; //set this true at end of some_html_with_inline_scripts 
$elem.html(some_html_with_inline_scripts); 

function are_scripts_loaded() { 
if (scripts_loaded) { 
    clearInterval(intid); 
    function_that_relies_on_inline_scripts_done_executing(); 
} 
} 
var intid = setInterval(are_scripts_loaded, 10); 

如果加載腳本,則每10毫秒測試一次。你可能想從10增加到其他的。

+0

這是一個醜陋的解決方法。不幸的是,我想不出更好的。 –

+1

好吧,如果它很漂亮,你不會稱之爲解決方法。如果正在加載的元素具有url,例如''或'