2010-10-23 87 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。