jquery noConflict仅在IE8中不起作用

时间:2010-05-13 21:38:22

标签: javascript internet-explorer-8 jquery

我有一个使用prootype框架的网站,我希望使用jquery插件。一切都不适用于IE8。它工作在ie7令我惊讶。知道什么可能是错的吗?

IE8给我的对象不支持这个属性或方法,其中行jQuery.noConflict();是

<script src="/my/docs/jquery.js" type="text/javascript"></script>
<script src="/my/docs/jquery.simplyscroll.js" type="text/javascript"> </script>
<script type="text/javascript">
jQuery.noConflict();
function OpenUp(sURL){
  window.open(sURL,null,'height=560,width=820,status=yes,toolbar=yes,menubar=yes,location=yes,resizable=yes,scrollbars=yes',false); 
}
jQuery(document).ready(function($) {
 $("head").append("<link>");
 css = $("head").children(":last");

 css.attr({
   rel:  "stylesheet",
   type: "text/css",
   href: "/my/docs/jquery.simplyscroll.css"
     });

     $("#scroller").simplyScroll({
       autoMode: 'loop',
       framerate: 1,
       speed: 1
     });
});
</script>

我也厌倦了以下事项:var $j = jQuery.noConflict(); var j = jQuery.noConflict();

everythig只能在IE8中使用。

8 个答案:

答案 0 :(得分:6)

我也使用jQuery-1.4.4.js遇到了这个问题。除IE8外,一切正常。 IE8无法识别jQuery()。我能够通过加载jQuery并在加载Prototype之前运行$ .noconflict()来解决这个问题,并且它在我的所有测试浏览器(包括IE8)上运行良好。这个序列与jQuery文档相反,因此我很担心它。在jQuery网站上找不到任何关于它的内容。

t22harris

答案 1 :(得分:2)

我能够解决这个问题的唯一方法,IE8(这是唯一一个有问题)和其他浏览器的方法是将jQuery和noConflict()调用放在头部后立即初始化其他库。像这样:

<script type="text/javascript" src="/path/to/prototype.js"></script>

<script type="text/javascript" src="/path/to/jquery.js"></script>

<script type="text/javascript">var $j = jQuery.noConflict(); </script>

...其次是使用jQuery或Prototype的任何其他脚本。

答案 2 :(得分:2)

我遇到过类似的问题。我目前使用的解决方案是将$变量保存在临时变量中,加载jquery(我从js代码加载jquery),运行jquery依赖代码(使用jQuery.noConflict),将$ variable设置回来。

它很脏,但似乎已经为我做了伎俩。

我添加jquery(如果需要)的函数是:

function getJQueryAndGo(callback) {
    var thisPageUsingOtherJSLibrary = false;
    var tempDollar = $;
    // Only do anything if jQuery isn't defined
    if (typeof jQuery == 'undefined') {
        if (typeof $ == 'function') {
            thisPageUsingOtherJSLibrary = true;
        }
        loadToHead('script','http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js', function() {
            if (typeof jQuery=='undefined') {
                    //alert('Super failsafe - still somehow failed...')
            } else {
                jQuery.noConflict();
                (function($) {
                    callback($);
                })(jQuery);

            }
        });
    } 
    else 
    { // jQuery was already loaded
        jQuery.noConflict(); // This may not be necessary
        (function($) {
            callback($);
        })(jQuery);
    }

    $ = tempDollar;
}

loadToHead只是将脚本加载到head标签中,并在加载脚本时运行回调函数。

我在网上发现了大部分代码,并对其进行了调整。不幸的是,我不记得现在在哪里给予信任。

答案 3 :(得分:1)

我过去遇到过类似的问题,并使用模拟ie7元标记

解决了这个问题
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

我不确定这是否是最好的工作。

答案 4 :(得分:1)

刚遇到同样的问题。 IE 8不喜欢:

var jQuery = jQuery.noConflict();

将其更改为:

var jq = jQuery.noConflict();

工作正常。

答案 5 :(得分:0)

过去,IE8在安装了多个IE版本的机器上遇到了奇怪的问题。在我的情况下,当我尝试通过javascript在新窗口中打开链接时出现错误。相同的代码在IE6和7上运行良好,只安装了 IE8的机器运行良好。

答案 6 :(得分:0)

这也是我发现的问题。我修复它的方法是将我的jQuery升级到1.4。版本1.3.2在IE8上使用较新的原型失败。对不起,这个答案很晚。

答案 7 :(得分:0)

我有1.4.4和1.4.3完全相同的错误在原型之后加载jquery并且仅在IE8中,甚至在Ie7或Ie6中 Jquery 1.4为我解决了这个问题。