因此,我从MVC3操作加载一些数据,返回Json,包含一些参数和内容作为字符串。我将内容添加到某个div。在部分视图中,我有一个document.ready JQuery事件。出于某种原因,该函数在添加内容之前执行,并且所有在ready函数中声明的选择器都是空的。
这是否有逻辑原因?我是否设置了超时选择器查看元素。但是超时可能非常不准确。
有什么建议吗?
谢谢!
示例代码小提琴:http://jsfiddle.net/aKxy7/
因此,我从MVC3操作加载一些数据,返回Json,包含一些参数和内容作为字符串。我将内容添加到某个div。在部分视图中,我有一个document.ready JQuery事件。出于某种原因,该函数在添加内容之前执行,并且所有在ready函数中声明的选择器都是空的。
这是否有逻辑原因?我是否设置了超时选择器查看元素。但是超时可能非常不准确。
有什么建议吗?
谢谢!
示例代码小提琴:http://jsfiddle.net/aKxy7/
我结束了编码的是等待,直到通过AJAX加载HTML所选元素已准备好方法。
这听起来像你期望$(document).ready()
火装载毕竟资产产生。这不是$(document).ready()
的工作原理。它在DOM完成渲染时触发。而已。这听起来像你想使用$(window).load()
,其中确实等到所有资产都加载。
$(window).load()函数在AJAX请求中不会触发,因为我没有执行整页回发。 – 2011-04-05 17:53:59
提示:$(window).load()从版本1.8弃用。 – robsch 2016-04-28 10:02:56
$(document).ready()
当HTML!被加载。这意味着如果您的HTML加载了一些可以更改HTML DOM的JavaScript,那么在此之前会调用这些$(document).ready()
。
你应该确保你的函数最后被调用或使用setTimeout
自称调用自己,直到你需要的元素全部被加载。
在$(document).ready函数可以调用jQuery的 $阿贾克斯或 $ .getJSON 从服务器上得到答案。然后你可以在你想要的地方注入json响应。没有的setTimeout需要
我无法使用该解决方案,因为这些JS库在MVC中不可用。 – 2011-04-05 21:25:22
首先,
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);
}
我知道这是一个旧的答案,但你能提供一个代码片段吗? – 2017-02-06 14:56:48