2010-10-23 86 views
2

我使用的IPBoard CMS自带原型,并使用最新的jQuery。与jQuery +原型+ Opera/IE冲突

我已经实现了jQuery图片浏览器: - 它在Chrome和Firefox上运行良好。 - 我有Opera和IE 8.

我已经在这里创造一个最小的例子烦恼:http://www.warriorlabs.net/index.php?app=ccs&module=pages&section=pages&folder=&id=22

你只需要点击图片。

在IE 8或Opera中:

当我删除原型时,一切正常。

当我用jQuery与我的“noConflicted”画廊查看器一起保存原型时,jQuery访问器返回的宽度和高度似乎存在错误。因此,加载框不居中,图片本身似乎映射到整个窗口。

有没有人知道为什么会发生这种情况?

有一点帮助,将不胜感激。

回答

1

我实际上没有在原型和jQuery的同时工作,但根据我的理解,您应该在原型脚本之前调用jQuery.noConflict()

试着改变你的文件头是这样的:

<head> 
    <script src="http://cdn.jquerytools.org/1.2.4/full/jquery.tools.min.js"></script> 
    <script type="text/javascript"> 
     jQuery.noConflict(); 
    </script> 
    <script type="text/javascript" src="http://prototypejs.org/assets/2009/8/31/prototype.js"></script> 
    <script type="text/javascript" src="http://www.warriorlabs.net/jScript/facebox/facebox.js"></script> 
</head> 

编辑:
也从第一行中删除jQuery.noConflict()facebox.js因为它消除了由原型定义的$功能。

边注:
写jQuery插件通常使用的方法是这样的:

(function($){ 
    //Inside this block we know that $ == jQuery 
    //The global $ (i.e. window.$) might be something else 
    //By using this anonymous function we make sure we don't polute the global namespace 
    var v = "function scope";//this is a variable in the scope of the function 
    window.globalV = "global scope";//this is a global variable 
    $.fn.myPlugin = function(){ 
    //my plugin code, usually something like: 
    return this.each(function(){ 
     //do something with each element 
     $(this).show(); 
    }); 
    //returning this.each allows for chaining 
    } 
})(jQuery); 

在Chrome中我得到你的演示页面上此错误:
Uncaught TypeError: Property '$' of object [object DOMWindow] is not a function [prototype.js:4598]

+0

嘿,丹,我已将修复应用于页面。到目前为止,我仍然有同样的问题。你还有错误吗? – 2010-10-23 18:08:49

+0

尝试从'facebox.js'中的第一行删除'jQuery.noConflict()'。 – 2010-10-23 18:25:36

+0

试过这个。它不会改变任何东西,可能是因为facebox是用jQuery写的,而不是原型。事实上,在我的例子中,原型永远不会被“使用”,它只是在那里:)。所以我认为原型正在破坏jQuery或其他东西,可能并非如此。 – 2010-10-23 19:05:47

0

如果您注释掉以下内容,可以解决此问题ng原型核心代码中的代码。但是,如果您需要使用scrollto功能,这可能不是最好的解决方案。

//Commented out because of the conflict with jQuery. 
    //scrollTo: function(element) { 
    // element = $(element); 
    // var pos = Element.cumulativeOffset(element); 
    // window.scrollTo(pos[0], pos[1]); 
    // return element; 
// }, 
0

我解决了类似的问题(jQuery - IE8中的原型冲突错误)切换jquery 1.4.2到1.5。