我在IE中收到以下错误:
'events'为null或不是对象 - 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做任何其他事情。
搜索错误“'events'为null或不是对象”我发现了这个:
“听起来像是对事件的引用 处理程序仍在那里,当时 处理程序本身已经消失。“
这听起来合乎逻辑。关于为什么以及何时会发生此错误的任何其他想法?
我已经找到了发生这种情况的地方,但我的所有线索都在那里结束。
如何清理,以便再次调用#reloadCenterDiv上的empty()或html()?
以下是#reloadCenterDiv的HTML:
<div id="reloadCenterDiv" style="border:none; margin: 0; overflow:auto; overflow-y:scroll; height: auto;"></div>
答案 0 :(得分: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
属性会导致错误,因为data
是undefined
。
jQuery的更新版本使用if ( data && data.events ) {
修复它,该版本验证是否存在一些要求其events
属性的对象。
答案 1 :(得分:0)
如果您无法更新jQuery,则可以改为设置HTML:
$("#divid").html("");
这基本上是做同样的事情。