jquery ready函数:脚本未检测到函数

时间:2010-06-02 11:09:33

标签: jquery function document-ready

有一个带占位符的网页(普通div)。通过ajax调用我将<form><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时会正确加载...

3 个答案:

答案 0 :(得分:1)

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

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

$('#site_preferences_content').load('content.html', function() {
  $('#site_preferences_content div').each(function() {
    tristate_DisableControl(this);
  }
});

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

文档就绪事件在加载整个文档时触发,这不包括使用ajax加载的脚本,因为如果不是这种情况,如果脚本一直在进行ajax调用,则就绪事件可能永远不会触发。

你应该在ajax加载方法上使用回调。