0

要点を知りたい場合は、ここに私の質問 があります。特定のスクリプトを呼び出して、最初にjavascriptにロードする方法はありますか?

詳細については、以下をお読みください。

HTMLの下部からロードしているjavascriptファイルがあります<body>。残念ながら、先頭にJQueryがないため、このjavascriptファイルを使用してJQueryを追加する必要があります。

私がする必要があるのは、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 に答える