2010-12-03 75 views
3

我在IE瀏覽器收到以下錯誤:jQuery的「‘事件’爲空或不是對象」錯誤,用空的時候()或HTML()

「事件」爲空或不是對象 - jQuery的latest.js d = 1848173663,線路113字符467

我使用jQuery 1.4.2,我不是在升級的位置,但因爲我們是在舊版本的jQuery UI的呢?並且使用比1.4.2更新的東西有太多的錯誤。

當我運行這段代碼的第二次我獲得以下錯誤:

$.post("page/view.do?undoCache=" + Math.random(), { 
    pageId: pId 
}, function(xmlContent){ 
    console.log('1');//get this one 
    $('#reloadCenterDiv').empty(); 
    console.log('2');//don't get this one unless line above is commented out, then will run til next line 
    $('#reloadCenterDiv').html(xmlContent); 
    console.log('3');//don't get this 
}); 

我敢肯定我沒有做什麼別的#reloadCenterDiv調用之間。

周圍的Googling的錯誤「‘事件’爲空或不是對象」我發現這一點:

「聽起來好像是一個事件 處理仍然存在,當 處理程序本身就是一個參考已經走了。」

這聽起來合乎邏輯。任何其他想法,爲什麼會發生這種錯誤?

我已經找到了發生的地方,但是所有的線索都在那裏結束。

如何清理東西,以便我可以再次在#reloadCenterDiv上調用empty()或html()?

這裏是#reloadCenterDiv的HTML:

<div id="reloadCenterDiv" style="border:none; margin: 0; overflow:auto; overflow-y:scroll; height: auto;"></div> 
+0

你可以發佈你的HTML嗎? – Jason 2010-12-03 21:12:41

回答

1

不知道,但它似乎像jQuery.cache被覆蓋。

由於DOM元素具有(必要時)映射到jQuery.cache的序列號,因此當您運行類似.empty()的函數時,jQuery會假定相關數據存在,查找該元素的數據並刪除它。

代替你的第一個日誌,這樣做:

console.log(jQuery.cache); 

,看看它給你。我敢打賭,有些東西正在覆蓋它。也許你正在加載jQuery兩次?

Here's an example有意刪除jQuery.cache。它給出了類似的錯誤。


編輯:

下面的意見彙總。在.empty()(或實際上cleanData())期間,jQuery從所有後代元素中抓取expando以刪除關聯的數據。

問題是,當jQuery這樣做,它假定數據成功定位。在這種情況下,數據與元素不相關,因此使用expando的值檢索數據返回undefined

因爲jQuery沒有(或1.4.2沒有)驗證數據發現,其試圖訪問數據的events屬性導致一個錯誤,因爲再次dataundefined

jQuery的更新版本使用if (data && data.events) {修復它,它驗證是否有某個對象要求它的events屬性。

+0

第一次和第二次調用都返回IE開發人員工具中的[對象對象]。我如何看到對象是什麼?將在Firebug中檢查此功能是否有幫助?我沒有在FireFox中看到錯誤。 – UpHelix 2010-12-03 21:29:40

0

如果您不能更新您的jQuery,你可以設置HTML改爲:

$("#divid").html(""); 

這基本上是做同樣的事情。

相關問題