我设法推迟加载JS库以及一个文档就绪函数,在此帖Possible to defer loading of jQuery?之后
但是,我有多个文档就绪函数,这些函数由不同的模块放在页面中(而不是在每个页面上)。我到目前为止的代码:
echo'
// deferred loading of jQuery library and
(function() {
function getScript(url,success){
var script=document.createElement("script");
script.src=url;
var head=document.getElementsByTagName("head")[0],
done=false;
script.onload=script.onreadystatechange = function(){
if ( !done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete") )
{
done=true;
success();
script.onload = script.onreadystatechange = null;
head.removeChild(script);
}
};
head.appendChild(script);
}
getScript("lib/jquery/js/jquery-1.4.4.min.js",function(){
getScript("lib/jquery/js/jquery.tools.min.js",function(){
$("ul.tabs").tabs("div.panes > .pane", {
';
if(!isset($params['onclickfunction']) == 'no') {
echo '
onClick: function() {
var myTab = this.getCurrentTab().text();
document.getElementById("titleReplacement").innerHTML = " - " + myTab;
},
'; } //end conditional click function
echo '
effect:"fade",
fadeInSpeed:800,
initialIndex:';
if(isset($_GET['tabs'])) { $this_url = $_GET['tabs']; }
else { $this_url = 'some text'; }
if($this_url == $params['tab1']) { echo '0'; }
elseif ($this_url == $params['tab2']) { echo '1'; }
elseif ($this_url == $params['tab3']) { echo '2'; }
//nothing matches? show first tab
else { echo '0'; }
echo ' }) ;
});
}) // possibly another ; here ???
})();
';
我认为这实际上有效但其他文档就绪函数正在尝试在加载库之前运行。是否有一个我可以用于其他函数的简单测试,因为我无法将它们合并到一个函数中。
欢呼声
答案 0 :(得分:0)
你可以做一个基本的检查,看看jQuery是否是这样定义的函数:
if( jQuery !== undefined ){
//Execute your jQuery code here
}
但是,上面会运行一次,如果没有定义jQuery那么它就不会再运行了。将您的document.ready
代码包装在成功加载jQuery lib时执行的函数中,就像您在创建选项卡时所做的那样。
您可能还想尝试从CDN加载jQuery lib。您将获得快速服务器和缓存的好处,这可能允许您在头部加载lib而不会造成重大性能损失。
答案 1 :(得分:0)
看看Kyle Simpson的LABjs。我想这会做你想要的......