所以,我正在从一个返回Json的MVC3动作中加载一些数据,其中包含一些参数和内容作为字符串。我将内容附加到某个div。在局部视图中,我有一个document.ready JQuery事件。由于某种原因,函数在附加内容之前执行,而我在ready函数中声明的所有选择器都是空的。
这有逻辑上的原因吗?我设置超时选择器看到元素。但是超时可能非常不精确。
有什么建议吗?
谢谢!
示例代码小提琴:http://jsfiddle.net/aKxy7/
答案 0 :(得分:2)
在加载所有 之后,您似乎期望$(document).ready()
触发。这不是$(document).ready()
的工作方式。它在DOM完成渲染时触发。而已。听起来你想使用$(window).load()
, 等待所有资产都被加载。
答案 1 :(得分:1)
我最终编写了一个方法,该方法一直等到通过ajax加载的HTML中的选定元素准备就绪。
答案 2 :(得分:0)
$(document).ready()
!已加载。这意味着,如果您的HTML加载了一些对HTML DOM进行更改的javascript,那么在此之前会调用$(document).ready()
。
你应该确保你的函数最后被调用,或者使用调用自身的setTimeout
,直到你需要的元素都被加载。
答案 3 :(得分:0)
在$(document).ready函数中,你可以调用jQuery $ .ajax或 $ .getJSON 从您的服务器获得答案。然后你可以在你想要的地方注入json响应。不需要setTimeout
答案 4 :(得分:0)
答案 5 :(得分: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 );
}