2010-06-02 102 views
1

没有与占位符(正常DIV)的网页。通过ajax调用,我将一个<form>和一个<script>加载到占位符中。脚本包含必要的JavaScript来初始化表单(即例如禁用控件以使表单只读等)。这是我的一段代码;它的工作原理,但评论部分不起作用。因为脚本引擎找不到对象tristate_DisableControl,它是我通过ajax调用的其中一个脚本中的函数。jQuery的准备功能:脚本没有检测功能

$(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)。就绪()执行DOM将被正确加载中...

+0

你在哪里加载你的脚本?请提供代码和/或标记。 – jAndy 2010-06-02 11:12:29

+0

我向所有人道歉。问题在于放置脚本。我通过ajax调用的页面中包含2个脚本;其中一人拥有tristate_DisableControl的定义。另一个脚本使用这个函数。问题是因为先放置第二个脚本,然后是第一个脚本... – deostroll 2010-06-03 06:31:23

回答

1

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

运行代码,一旦额外的内容加载,使用load方法的回调。例如:

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

我不知道我理解正确你的问题,但如果通过AJAX调用返回的tristate_DisableControl声明,则没有,DOMReady不等到所有的AJAX调用执行(毕竟,这怎么可能可能知道多少Ajax调用将作出?)

您必须使用success/complete AJAX函数的回调函数以查明它何时完成加载。

+0

tristate_DisableControl不是由AJAX调用返回的。具体来说我Ajax调用得到一个页面,说:'' - >这包含了tristate_DisableControl定义 – deostroll 2010-06-02 11:17:15

0

文档准备事件触发时,整个文件被加载,从而排除了使用AJAX加载的脚本,因为如果不是这样,ready事件可能永远不会,如果你的脚本保存,让AJAX调用火。

你应该对AJAX调用方法用于该用途的回调。