2011-04-05 107 views
5

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

這是否有邏輯原因?我是否設置了超時選擇器查看元素。但是超時可能非常不準確。

有什麼建議嗎?

謝謝!

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

回答

0

我結束了編碼的是等待,直到通過AJAX加載HTML所選元素已準備好方法。

+0

我知道這是一箇舊的答案,但你能提供一個代碼片段嗎? – 2017-02-06 14:56:48

2

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

+1

$(window).load()函數在AJAX請求中不會觸發,因爲我沒有執行整頁回發。 – 2011-04-05 17:53:59

+0

提示:$(window).load()從版本1.8棄用。 – robsch 2016-04-28 10:02:56

0

$(document).ready()當HTML!被加載。這意味着如果您的HTML加載了一些可以更改HTML DOM的JavaScript,那麼在此之前會調用這些$(document).ready()

你應該確保你的函數最後被調用或使用setTimeout自稱調用自己,直到你需要的元素全部被加載。

0

在$(document).ready函數可以調用jQuery的 $阿賈克斯或 $ .getJSON 從服務器上得到答案。然後你可以在你想要的地方注入json響應。沒有的setTimeout需要

0

首先,

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); 
} 
相關問題