4

因此,当通过 ajax 检索一些 html 并将其插入到页面中.html(parseHtml(result,true));时,结果中的 javascript 似乎是在不考虑 doc.ready 的情况下执行的。

我猜这是因为父页面本身已经“准备就绪”,并且对于通过 parseHtml 插入页面的 HTML 片段+脚本没有就绪事件的概念/实现。

我这样测试过。通常你会期望输出为 1、3、2,因为文档准备好会最后发生,但我得到的输出是 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 中“准备好”?

4

1 回答 1

1

文档

如果在 DOM 初始化后调用 .ready() ,传入的新处理程序将立即执行。

请注意,这通常指的是 DOM。当您稍后使用 AJAX 加载其他元素时,DOM 仍处于其初始化状态,因此上述适用。

如果您使用.load()加载包含<script>元素的 HTML,我相信所有脚本都会在其他元素添加到 DOM 后执行。所以没有必要$(document).ready()在这些脚本中使用,但这样做应该没有害处。

于 2013-10-07T21:25:49.963 回答