jquery原型仅在ie8中冲突

jquery原型仅在ie8中冲突,jquery,internet-explorer,internet-explorer-8,prototypejs,conflict,Jquery,Internet Explorer,Internet Explorer 8,Prototypejs,Conflict,我正在使用jQuery为现有页面构建一个模块。页面也使用原型,因此通常存在jQuery原型冲突。我使用的是jQuery.noConflict(),除了ie(在ie8中测试)之外,所有浏览器都可以正常工作。 我在这里和其他网站上读过所有类似的问题,但我无法让它起作用。 这是关于它如何工作的:页面使用prototype(effects.js、prototip.js等)加载prototype和其他.js文件,然后加载我的模块(也称jQuery在prototype之后加载)。 我读过关于将prototy

我正在使用jQuery为现有页面构建一个模块。页面也使用原型,因此通常存在jQuery原型冲突。我使用的是jQuery.noConflict(),除了ie(在ie8中测试)之外,所有浏览器都可以正常工作。 我在这里和其他网站上读过所有类似的问题,但我无法让它起作用。 这是关于它如何工作的:页面使用prototype(effects.js、prototip.js等)加载prototype和其他.js文件,然后加载我的模块(也称jQuery在prototype之后加载)。 我读过关于将prototype的$()函数更改为$$$()的文章,但这是不可能的(许多使用prototype的其他模块都需要更改),所以这只是关于更改我的js

然后我读到了关于使用

(function($) {
    //my jQuery code in here

})(jQuery);
但我不完全明白。我的代码是这样的:

$J = jQuery.noConflict();
$J(document).ready(function(){
     fun1();
     //jquery stuff
     fun2();
});

function fun1(){
     //stuff/jQuery code/ call other functions
}

function fun2(){
     //stuff/jQuery code/ call other functions
}
如果我将上述所有内容放入
(函数($){/*上述所有内容*/})(jQuery)

我知道所有函数都是未定义的


我做错了什么?或者还有其他解决方案吗?
jQuery.noConflict()的
若要工作,必须在加载所有其他javascript库之前调用它,否则您将已经覆盖
$
变量。使用
(函数($){/*以上所有函数*/})(jQuery)得到的错误
是因为它定义了一个匿名函数,其中的任何函数都只存在于它内部,不能在它外部使用,除非它是匿名函数作用域之外的对象的一部分

所以你需要像这样使用它

//Must be called before any other library in included on the page.
$J = jQuery.noConflict();

(function($){
    $(document).ready(function(){
        fun1();
        //jquery stuff
        fun2();
    });
})(jQuery);

function fun1(){
    //stuff/jQuery code/ call other functions
}

function fun2(){
    //stuff/jQuery code/ call other functions
}

对于
jQuery.noConflict()
若要工作,必须在加载所有其他javascript库之前调用它,否则您将已经覆盖
$
变量。使用
(函数($){/*以上所有函数*/})(jQuery)得到的错误
是因为它定义了一个匿名函数,其中的任何函数都只存在于它内部,不能在它外部使用,除非它是匿名函数作用域之外的对象的一部分

所以你需要像这样使用它

//Must be called before any other library in included on the page.
$J = jQuery.noConflict();

(function($){
    $(document).ready(function(){
        fun1();
        //jquery stuff
        fun2();
    });
})(jQuery);

function fun1(){
    //stuff/jQuery code/ call other functions
}

function fun2(){
    //stuff/jQuery code/ call other functions
}

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

var$j=jQuery.noConflict()


。。。然后是使用jQuery或Prototype的任何其他脚本。

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

var$j=jQuery.noConflict()


。。。然后是使用jQuery或Prototype的任何其他脚本。

这里重要的是首先包括jQuery库,然后使用noConflict()创建脚本块,然后包括任何原型库。首先感谢您的回复:)加载脚本的方式是固定的,不能更改,因为我只能编辑我的模块,而不能编辑整个页面。尽管如此,尽管在jquery和jquery.noConflict之前加载了原型,但它在ff、chrome和safari中都能正常工作原型代码工作吗?我认为,如果在jQuery代码之后加载任何原型代码,它都会停止工作。这里重要的是首先包含jQuery库,然后使用noConflict()创建脚本块,然后包含任何原型库。首先感谢您的回复:)加载脚本的方式是固定的,不能更改,因为我只能编辑我的模块,而不能编辑整个页面。尽管如此,尽管在jquery和jquery.noConflict之前加载了原型,但它在ff、chrome和safari中都能正常工作原型代码工作吗?我认为任何原型代码如果在jQuery代码之后加载,都会停止工作。我强烈建议尝试使用其中一种,但不能同时使用两种。您可以让它们不冲突,而不会带来太多麻烦,但这意味着您的用户必须加载两个不同的库。jQuery和Prototype都有插件,它们可以做你想做的大部分事情。我强烈建议尝试使用其中一个,但不能同时使用两个。您可以让它们不冲突,而不会带来太多麻烦,但这意味着您的用户必须加载两个不同的库。jQuery和Prototype都有插件,它们可以完成您想要的大部分工作。