1

有一个带有占位符的网页(一个普通的 div)。通过 ajax 调用,我将 a<form>和 a加载<script>到占位符中。该脚本包含初始化表单所需的javascript(例如,禁用控件以使表单成为只读等)。这是我的一段代码;它有效,但注释部分不起作用。因为脚本引擎找不到对象 tristate_DisableControl,它是我通过 ajax 调用的脚本之一中的一个函数。

$(document).ready(function() {

    //    $('#site_preferences_content div').each(function() {
    //        if (typeof (window.tristate_DisableControl) == 'undefined') {

    //            if (typeof (window.console) != 'undefnied')
    //                console.log((new Date()).toTimeString() + ' not logable');

    //            pausecomp(1000);

    //        }
    //        else
    //            tristate_DisableControl(this);
    //    }); //end $('#site_prefrences_content div').each()

    setTimeout(function() {
        $('#site_preferences_content div').each(function() { tristate_DisableControl(this); })
    }, 1000);

});  

我认为在 $(document).ready() 执行时 DOM 将被正确加载......

4

3 回答 3

1

ready事件在页面完成加载时发生。它不会等待异步 AJAX 调用完成。

要在加载额外内容后运行代码,请使用方法的回调load。例子:

$('#site_preferences_content').load('content.html', function() {
  $('#site_preferences_content div').each(function() {
    tristate_DisableControl(this);
  }
});
于 2010-06-02T11:23:58.727 回答
0

我不确定我是否正确理解了你的问题,但是如果tristate_DisableControlAJAX 调用返回的声明,那么不,DOMReady不会等到所有 AJAX 调用都被执行(毕竟,它怎么可能知道有多少 AJAX 调用将被制作?)

您必须使用 AJAX 函数的success/complete回调来找出它何时完成加载。

于 2010-06-02T11:13:19.847 回答
0

加载整个文档时会触发 Document ready 事件,其中不包括使用 ajax 加载的脚本,因为如果不是这种情况,如果您的脚本继续进行 ajax 调用,ready 事件可能永远不会触发。

为此,您应该在 ajax 加载方法上使用回调。

于 2010-06-02T11:15:16.270 回答