JQuery - $(document).ready()执行BEFORE元素加载

时间:2011-04-05 03:01:53

标签: javascript jquery asp.net-mvc

所以,我正在从一个返回Json的MVC3动作中加载一些数据,其中包含一些参数和内容作为字符串。我将内容附加到某个div。在局部视图中,我有一个document.ready JQuery事件。由于某种原因,函数在附加内容之前执行,而我在ready函数中声明的所有选择器都是空的。

这有逻辑上的原因吗?我设置超时选择器看到元素。但是超时可能非常不精确。

有什么建议吗?

谢谢!

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

6 个答案:

答案 0 :(得分:2)

在加载所有 之后,您似乎期望$(document).ready()触发。这不是$(document).ready()的工作方式。它在DOM完成渲染时触发。而已。听起来你想使用$(window).load() 等待所有资产都被加载。

答案 1 :(得分:1)

我最终编写了一个方法,该方法一直等到通过ajax加载的HTML中的选定元素准备就绪。

答案 2 :(得分:0)

HTML时调用

$(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 );
}