jQuery noConflict IE问题

时间:2013-04-19 20:01:39

标签: javascript jquery

我正在构建一个依赖于jquery被加载的小部件 - 我正在使用以下内容来加载它和我的代码:

(function () {

    var jqueryVersion = (window.jQuery !== undefined) ? window.jQuery.fn.jquery.charAt(0) + window.jQuery.fn.jquery.charAt(2) : 0;

    var jQuery;
    /******** Called once jQuery has loaded ******/
    function scriptLoadHandler() {
        jQuery = window.jQuery.noConflict(true);
        main();
    }

    /******** Load jQuery if not present *********/
    if (parseInt(jqueryVersion) < 17) {
        var script_tag = document.createElement('script');
        script_tag.setAttribute("type", "text/javascript");
        script_tag.setAttribute("src", "//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js");
        script_tag.onload = scriptLoadHandler;
        script_tag.onreadystatechange = function () { // Same thing but for IE
            if (this.readyState === 'complete' || this.readyState === 'loaded') { scriptLoadHandler(); }
        };
        document.getElementsByTagName("head")[0].appendChild(script_tag);
    } else {
        jQuery = window.jQuery;
        main();
    }

    function main() {
        //my code goes in here
        //leaving blank for now because I still get error
    }

})();

我从这里得到了大部分内容:http://alexmarandon.com/articles/web_widget_jquery/

我需要jquery 1.7或更高版本因为我使用.on()方法。当我使用早于1.7的jquery在页面上运行它时,我有时会在IE中遇到错误,导致我认为与旧版本的jquery或页面上的其他js存在冲突。一些错误:

SCRIPT5007:无法获取未定义或空引用的属性'forceInt'

SCRIPT5007:预期的对象

SCRIPT5007:无法获取未定义或空引用的属性“缓动”

SCRIPT438:对象不支持属性或方法'on'

如果我改变

,这些错误就会消失
jQuery = window.jQuery.noConflict(true);

jQuery = window.jQuery.noConflict();

我做错了吗?

1 个答案:

答案 0 :(得分:3)

你的问题可能是因为“处理程序”的问题。被叫两次。

http://msdn.microsoft.com/en-us/library/ie/hh180173(v=vs.85).aspx

此外,取自http://api.jquery.com/jQuery.noConflict/

  

&#34;如果有必要,您可以通过传递true来释放jQuery名称   作为方法的参数。这很少是必要的,如果你   必须这样做(例如,如果你需要使用的多个版本   jQuery库在同一页面上),你需要考虑最多   插件依赖于jQuery变量的存在而可能不存在   在这种情况下正确运作。&#34;