2013-06-19 40 views
2

我通过ajax加载html,然后将该html放入div。一旦已经加载到div的HTML已经被加载,我该如何触发JavaScript?如何触发一些JavaScript一旦HTML(已通过AJAX加载)加载?

我不知道onload事件是我正在寻找这个,或者如果这甚至可以用div元素。请记住,这个html将被异步放入div。

编辑:

在html具有嵌入的YouTube视频,因此具有加载的图像。

+2

我们看一些代码。 –

+1

你的意思是你想知道什么时候将图片和这些东西加载到div中。 – Musa

回答

7

一旦已经加载到div的HTML已被加载,我该如何触发JavaScript?

你就去做把上下文在div,由XMLHttpRequest提供的onreadystatechange回调(或你使用任何库提供的“完成”回调)之后。

例如为:

var xhr = new XMLHttpRequest(/* ... */); 
// ... 
xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4 && xhr.status >= 200 && xhr.status <= 299) { 
     /* ...put the content in the div...*/ 

     /* ...call your function... */ 
    } 
}; 
xhr.send(); 

您还没有表现出你是如何把内容在div,但它放在那里立即,所以没有必要回调。


一些评论提出了一个有用的问题:怎么样加载内容中的图像等?这更复杂。

把内容在div(让我们假设你有一个创造性地命名为div变量div)后,你需要知道有多少不完整的图像有(允许竞争状态,因为虽然的JavaScript在浏览器上是单线程的,浏览器没有),然后在所有图像加载后触发你的代码。

东西有点像(假设这是所有的功能,也许是onreadystatechange处理程序):

var images = div.querySelectorAll('img'), 
    img, i, done = false; 

for (i = 0; i < images.length; ++i) { 
    img = images[i]; 
    img.onload = img.onerror = checkDone; 
} 
checkDone(); 

function checkDone() { 
    var x, completed = 0; 

    if (done) { 
     return; 
    } 

    for (x = 0; x < images.length; ++x) { 
     if (images[x].complete) { 
      ++completed; 
     } 
    } 

    if (completed === images.length) { 
     done = true; 

     /* ...call your "load" function here... */ 
    } 
} 
+1

我认为OP已经知道这一点,因为他可以把结果放在一个div中。 – Musa

+0

如果XMLHttpRequest响应包含字符串会怎么样?它放在DOM中。即使XMLHttpRequest完成回调已经执行,东西也没有加载。 –

+1

如果** OP处理图像**和**需要等待它们完成加载,那肯定会成为问题**。这个问题没有提到任何关于这个问题。 (这可能只是一个失败的问题。) –