0

这个问题是我的另一个问题的结果。

代码是:

<script type='text/javascript'>
    var scripts = [ 
        "http://www.---.com/include/jquery-1.8.3.min.js",
        "http://www.---.com/include/functions.js",
        "http://www.---.com/include/myjs.js",
        "http://www.---.com/include/plugins/bxslider/bxslider.js" 
    ];
    function downloadJSAtOnload() { 
        for( var i=0; i<scripts.length; i++ ) {
            var element = document.createElement('script');
            element.src = scripts[i];
            document.body.appendChild(element);
        }
        $(document).ready(function(){
            $('#mainslide .bxslider').bxSlider({
                slideWidth: '960',
                mode: 'vertical',
                speed: '500',
                captions: false,
                pager: false,
                controls: false,
                nextText: 'Next',
                prevText: 'Prev',
                auto: true,
                autoHover: true,
                pause: 3000
            });
        });
    }
    if (window.addEventListener) window.addEventListener('load', downloadJSAtOnload, false);
    else if (window.attachEvent) window.attachEvent('onload', downloadJSAtOnload);
    else window.onload = downloadJSAtOnload;
</script>

生成的错误是"Uncaught ReferenceError: $ is not defined "

奇怪的是,在许多浏览器和版本中,一切都可以完美运行(幻灯片、灯箱……)。就在 IE8 和 Safari 4 中,会向用户显示警报。

4

5 回答 5

2

由于您将 JS 库动态添加到文档中,因此在加载脚本后需要一个回调函数来初始化 bxSlider。理想情况下,应该在 bxSlider 加载后调用回调。

element.setAttribute("type","text/javascript");
element.onload = callBackFunction;
document.body.appendChild(element);

var callBackFunction() {
            $('#mainslide .bxslider').bxSlider({
                slideWidth: '960',
                mode: 'vertical',
                speed: '500',
                captions: false,
                pager: false,
                controls: false,
                nextText: 'Next',
                prevText: 'Prev',
                auto: true,
                autoHover: true,
                pause: 3000
            });
}
于 2013-04-11T13:00:16.850 回答
0

将您的函数从 document.ready() 中取出,并将其添加到 jQuery.js 文件的末尾。这样它只会在 jQuery 加载后运行。

于 2013-08-13T18:45:23.220 回答
0

单独导入jquery示例

<script src="http://www.---.com/include/jquery-1.8.3.min.js"> </ script>
于 2013-04-11T12:57:27.543 回答
0

那些浏览器可能太慢而无法在script元素创建之后实际加载 jQuery 文件,body然后才能到达第一个$.

为什么不在文档的script标签中声明它们?head

于 2013-04-11T12:52:44.703 回答
0

您将脚本添加到文档正文(它们实际上应该在头部),但不要等待它们被下载并执行,然后再访问 jQuery,$(document).ready(...)所以我希望这至少在某些时候会失败。onready您需要在不使用 jQuery的情况下附加到文档事件。

于 2013-04-11T12:53:00.800 回答