2010-05-14 79 views
1

)。我正在玩一些Opera用戶JS。我在我的用戶JS文件夾中包含「1jquery.min.js」(前面的1個因爲Opera按字母順序加載它們)。不幸的是,它似乎沒有工作。Opera用戶JS中的jQuery不起作用

window.onload = OnWindowLoad; 

$(document).ready(function() 
{ 
    alert ($('#area_19')); 
}); 

function OnWindowLoad() 
{ 
    alert ($('#area_19')); 
    alert(document.getElementById("area_19")); 
} 

這段代碼有趣的是前兩個警報返回NULL,但最後一個警告找到了對象!所以元素肯定存在於頁面中,但我的jQuery似乎無法獲得它。更奇怪的是,jQuery「ready」函數起作用,表明我具有jQuery功能。

我對這一切都很困惑:: - /。希望有人能給我一個線索:: - )。

回答

2

我懷疑你在使用另一個JS框架的頁面上運行腳本,可能是Prototype.js。

如果Prototype包含在目標頁面中,它會覆蓋你自己的jQuery的副本$,它通過ID獲取元素,而不是選擇器。由於沒有ID爲#area_19#不是ID中的有效字符)的元素,因此將返回null。對於不存在的元素,jQuery永遠不會返回null,你只會得到一個空的包裝器對象。

(該$(document).ready()代碼仍然會執行,因爲原型被列入以及改變$行爲之前$被調用。)

嘗試使用明確jQuery函數,而不是$快捷方式。

當混合多個框架,甚至混合相同框架的兩個副本/版本時,這些干擾很常見。從jQuery的角度來看,它的交互可以減少,但不會消除,noConflict。就個人而言,像用戶腳本這樣的代碼可能必須生活在各種不受我自己控制的上下文中,我會避​​免使用jQuery等廣泛的框架。

+1

這確實是答案。謝謝你,非常友善,先生! :: - )。 – Axonn 2010-05-14 08:58:34