簡體   English   中英

JQuery - $(document).ready()執行BEFORE元素加載

[英]JQuery - $(document).ready() executing BEFORE element load

所以,我正在從一個返回Json的MVC3動作中加載一些數據,其中包含一些參數和內容作為字符串。 我將內容附加到某個div。 在局部視圖中,我有一個document.ready JQuery事件。 由於某種原因,函數在附加內容之前執行,並且我在ready函數中聲明的所有選擇器都是空的。

這有邏輯上的原因嗎? 我設置超時選擇器看到元素。 但是超時可能非常不精確。

有什么建議?

謝謝!

示例代碼小提琴: http//jsfiddle.net/aKxy7/

這聽起來像你期望$(document).ready()所有資產產生被加載觸發。 這不是$(document).ready()工作原理。 它在DOM完成渲染時觸發。 而已。 聽起來你想使用$(window).load() ,它等到所有資產都加載完畢。

HTML時調用$(document).ready() 已加載。 這意味着如果你的HTML加載了一些改變HTML DOM的javascript,那么$(document).ready()會在此之前被調用。

你應該確保你的函數最后被調用,或者使用調用自身的setTimeout ,直到你需要的元素都被加載。

在$(document).ready函數中,您可以調用jQuery的$ .ajax或$ .getJSON來從服務器獲取答案。 然后你可以在你想要的地方注入json響應。 不需要setTimeout

首先,

var elementIWannaGet = $('html-content-div');

應該

var elementIWannaGet = $('#html-content-div');

但是,你可能最好的做法是將腳本與內容分開,因為已經加載了dom ...

考慮更改對此的響應:

{ result: true,
  data: { id: '1' },
  elementId: '#html-content-div',
  content: '<div id="html-content-div">Html content! :D</div>'
}

然后更改contentLoaded處理程序,如下所示:

function contentLoaded(response) {
    if (response.result == true)
        handleError(response);

    // Get the container where the response.content will be rendered to.
    var targetContainer = $('#target-container-id');

    // Append the content
    targetContainer.append(response.content);

    // Do something with your container
    alert( $(response.elementId).html().length );
}

我最終編寫了一個方法,該方法一直等到通過ajax加載的HTML中的選定元素准備就緒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM