所以当通过ajax检索一些html并使用.html(parseHtml(result,true));
将其插入页面时,似乎就是执行结果中的javascript而不考虑doc.ready。
我猜这是因为父页面本身已经“准备就绪”,并且没有HTML片段+脚本通过parseHtml插入页面的ready事件的概念/实现。
我测试了这个。通常你会期望输出为1,3,2,因为doc ready会在最后出现,但我得到的输出是1,2,3。可能纯属巧合。
console.log('1');
$(document).ready(function () {
console.log('2');
});
console.log('3');
有些代码在doc.ready中无法正常工作以初始化一个tinyMce编辑器,但是如果我对它进行500毫秒的延迟来伪造等待doc.ready,它就能正常工作。因此,在将新的html集成到DOM中之前,javascript运行得太早似乎是一个问题。显然这个setTimeout是一个无法一致工作的黑客。
所以我的问题是:
.html($。parseHtml是否尊重doc.ready在结果中,因为它等待新的html在DOM中准备好运行该脚本? 是否有其他方法在ajax html结果中包含脚本并让它等待直到添加的html在dom中“准备好”?
答案 0 :(得分:1)
如果在初始化DOM之后调用.ready(),则会立即执行传入的新处理程序。
请注意,这通常指的是DOM。当您稍后使用AJAX加载其他元素时,DOM仍处于初始化状态,因此上述情况适用。
如果使用.load()
加载包含<script>
元素的HTML,我相信所有脚本都会在其他元素添加到DOM后执行。因此,不需要在这些脚本中使用$(document).ready()
,但这样做应该没有任何害处。