为什么这段代码不起作用(以及如何修复它)?

时间:2013-04-11 12:48:34

标签: javascript jquery

这个问题是another question of mine的结果。

代码是:

<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>

生成的错误是“未捕获的ReferenceError:$未定义”

奇怪的是,在许多浏览器和版本中,一切都完美无缺(幻灯片,灯箱,...)。只需在IE8和Safari 4中,就会向用户显示警报。

5 个答案:

答案 0 :(得分: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
            });
}

答案 1 :(得分:0)

script创建body元素之前,这些浏览器实际加载jQuery文件的速度可能太慢,才能到达第一个$

为什么不在文档script的{​​{1}}标记中声明它们?

答案 2 :(得分:0)

您将脚本添加到文档正文(它们应该在头部)但是在$(document).ready(...)访问jQuery之前不要等待它们下载和执行,所以我希望这至少会失败一些时间。您需要在不使用jQuery的情况下附加到文档onready事件。

答案 3 :(得分:0)

单独导入jquery示例

<script src="http://www.---.com/include/jquery-1.8.3.min.js"> </ script>

答案 4 :(得分:0)

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