0

如果您想直截了当,这是我的问题: 有没有办法调用特定脚本以首先在 javascript 中加载?

更多详情,请阅读以下内容:

我有一个从我的 HTML 底部加载的 javascript 文件<body>。不幸的是,头部没有JQuery,所以我必须通过这个javascript文件添加它。

我需要做的是添加一个 JQuery 灯箱插件。

我的问题是,当我加载页面时,有时 JQuery 不是加载的第一件事。所以我收到错误“jQuery 未定义”。然后,这将为插件中的未定义方法引发更多错误。

这不会一直发生,只是有时会发生。这让我认为这是一个加载/操作顺序问题。

有什么办法可以保证我的 JQuery 脚本是第一个加载的吗?

这是我的一些 javascript 文件。

//Get head element
var head = document.getElementsByTagName("head")[0];

//Create and insert JQuery
var jquery = document.createElement('script');
jquery.type = 'text/javascript';
jquery.src = 'http://image.iloqal.com/lib/fe6b/m/1/jquery.1.7.2.js';

head.insertBefore(jquery,head.childNodes[4]);

function thescripts() { 

    var fancybox = document.createElement('script');
    fancybox.type = 'text/javascript';
    fancybox.src = 'http://image.iloqal.com/ilejquery.fancybox-1.3.4.pack.js';
    head.appendChild(fancybox);

    var thebody = document.getElementsByTagName('body')[0];

    thebody.appendChild(thediv);
    thediv.appendChild(theimg);


    //Run fancybox
    thebody.onload = function() {

    $('#lightbox').ready(function() {
        $("#lightbox").fancybox().trigger('click');
    });
}
};
 if(jquery.attachEvent){
     jquery.attachEvent("onload",thescripts());
} else {
     jquery.onload = thescripts();  
}

任何帮助表示赞赏!

4

3 回答 3

2

试试这个。在从页脚调用的 javascript 文件中添加这段代码。

<script type="text/javascript">

if(typeof jQuery == 'undefined'){
        document.write('<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"></'+'script>');
  }

</script>

如果未加载,这将包括 jquery。我认为这将解决您的问题。

于 2012-05-14T18:32:52.270 回答
1

使用$(function() {...do your stuff here...});是确保在执行脚本之前加载 jQuery 的方法,但你可能会让自己更难并执行以下操作:

thebody.onload = function() {
   RunMyjQuery();
}

function RunMyjQuery() {
    if (typeof $ === 'undefined') {
         setTimeout(RunMyjQuery, 500);
    }else{
        $('#lightbox').ready(function() {
            $("#lightbox").fancybox().trigger('click');
        });
    }
}
于 2012-05-14T18:54:48.527 回答
0

thescripts马上打电话,虽然你尽量不打电话。用这个:

jquery.onload = thescripts; // notice no parentheses

而且,你的thebody.onload策略也行不通。改用$(document).ready

$(document).ready(function{
    $('#lightbox').ready(function() {
        $("#lightbox").fancybox().trigger('click');
    });
});
于 2012-05-14T18:29:11.553 回答