【发布时间】:2013-01-15 06:59:50
【问题描述】:
我正在尝试在父页面上使用 jQuery Load 从 URL 动态插入一些子页面。在父页面中,我执行以下操作:
var html = gridDiv.load(self.options.url, function(html, status, xhr)
{
gridDiv.find("myObject:first").data("objectInstance");
//do something....
});
数据对象实际上是在文档准备好运行的函数期间添加到子页面中的......
$().ready(function()
我最初注意到的是,在本地运行时,一切都按预期工作。但是,当部署在实际 url 上时,加载完成事件会在 $().ready 在子页面上完成之前触发。第一个问题是这是正确的,有什么办法可以让我只有在子页面上调用 $().ready 之后才能运行我的代码?
我尝试了一种解决方法,即在父页面中使用计时器来检查元素。在很短的时间间隔后,该元素将出现在 dom 中,但其上的数据为空。但是,如果我在按钮单击中运行调试器,我可以在那里看到所有内容..
另一种解决方法是将脚本放在子页面的底部,然后删除准备好的文档。这也不起作用。
有什么建议吗? (我不能过多修改子页面的代码逻辑,需要自包含)
【问题讨论】:
-
您不应在使用 .load 或 ajax 加载的子页面上包含脚本,它们将在附加内容之前执行,从而导致所有元素选择失败。您可以通过将内容加载为纯文本然后自己解析脚本标签,然后附加 html 并执行脚本来绕过它。
-
另外,如果您想要更短的
$(document).ready(function(){}),请使用$(function(){})。$().ready(function(){})不是该方法的预期使用方式。 -
似乎可以解决所有问题的是从客户端页面中删除 jQuery 导入。我假设是因为如果存在那么这就是为什么找不到父页面中元素上的 data() 的原因(因为它正在加载到另一个内存空间中?)。因此,我建议任何有此问题的人尝试仅加载包含所需脚本和 html 的片段子页面。
标签: jquery