|
来源:http://trac.seagullproject.org/wiki/Howto/JavaScript/OnloadEvents 管理onload和onreadyDOM事件你可能想在页面载入时运行某些脚本。长时间以来,开发人员是通过为window.onload事件指定一个处理器: /* Some HTML */ <body onload="init()"> 或
/* In Javascript */
window.onload = function() {
init();
}
You can add as many onload event handlers in your code (Managers) by calling the $output→addOnLoadEvent() as follows 你可以在manager中通过调用$output→addOnLoadEvent()载入任意个onload事件的处理器,如 $output->addOnLoadEvent("init()");
问题出现在onload事件只在所有页面内容(包括图像,框架和其它任何二进制内容)被载入之后才被激发。如果你的页面上有很多图像,在页面激活之前会有一段时间是停滞不前的。 0.6.2 onReadyDOM特性在大多数情况下,你启动你的网站是为了使你的DOM可用,因为你的脚本将和DOM结点交互,如,页面元素。所有我们将Dean Edwards的window.load集成到seagull中,这样你只需给$output→addLoadEvent()方法再传递一个参数(这个参数是可选的),脚本会在DOM就绪后立即执行。 从你的manager中在display方法中
function display(&$output) {
$output->addOnLoadEvent("init('param')", true)
}
注意函数被包含在双引号中,而该函数的参数是用单引号括起来的。第二个参数为了向后兼容(BC)默认是设置成fault。在以后的新版本中它将被设置成true。 从javascript脚本在任何地方调用sgl.ready(),它会在DOM就绪后立即执行。如果需要的话,你可以调用多个sgl.ready()。
sgl.ready(function() {
init('param');
});
Notice that you have to pass sgl.ready() an anonymous (lambda) function. 如果你没这么做,你有可能会得到一个错误。因为这个函数会有javascript解析这行时立即执行这个函数。 0.6.2其它特性为了增强javascript在Seagull框架中的集成度,我们增加了$output→addOnUnloadEvent() $output→addOnUnloadEvent(“foo()”); 你有可能想要在所有的页面中执行某个处理器。全局配置文件增加了一些配置选项,你可以在全局文件中添加JS: $conf['site']['globalJavascriptOnload'] = ''; $conf['site']['globalJavascriptOnUnload'] = ''; $conf['site']['globalJavascriptOnReadyDom'] = ''; 参考资料
|