我有这样的代码:
_removeSelection : function(e, refocus) {
var thisObj = e.data,
lineItem = $(this).closest('li'),
templateData = lineItem.data('templateData');
thisObj.element.trigger('beforeRemoveSelection',[templateData]);
lineItem.remove();
thisObj._selection_items = $(thisObj._selections).find('li');
if ( ( refocus != 'undefined' && refocus === true ) || refocus == 'undefined') {
thisObj.refocus();
}
thisObj.element.trigger('toggleSelection');
thisObj.element.trigger('limitNotHit', [true]);
thisObj.element.trigger('removeSelection',[templateData]);
}
一切记录正常,它似乎执行良好。然而,在我所有的代码运行后,我得到一个异常:
"对象不支持属性或方法'getAttribute'"
所以我有一个循环调用函数X次,但它只运行函数完成一次。
EDIT:循环触发对元素的点击,从而运行该函数。如果我使用firebug手动触发点击,它仍然会抛出异常
EDIT 2:在jquery-1.6.2.js
中的第4550行抛出异常执行lineItem[0].parentNode.removeChild( lineItem[0] );
也会导致延迟异常。看起来@zzzz关于一些奇怪的缓存清理是对的。
这只发生在使用.trigger('click')时,而不是在实际点击元素
我相信这是因为IE气泡点击事件到一个不再存在的节点(然后jQuery试图做些什么?)
我认为是因为你的点击删除了父元素,所以当它试图冒泡到该元素时,它会中断。
无论如何,我在IE中看到了完全相同的事情,当使用backbone.js重新渲染更改事件时-更改事件出现,但节点不再存在(因为它被再次渲染,所以它是一个新节点),并触发此错误。
使用事件。stopPropagation [http://api.jquery.com/event.stopPropagation/]在过去已经为我解决了这个问题,给它一个机会。
我想说这是一个bug。有一个未处理的异常在sizzle,它只发生在浏览器不支持querySelectorAll(如IE7或IE8+在兼容模式)。
type的属性处理程序接收一个不是元素节点的参数。
如果函数看起来像预期的那样工作,就捕获并忽略这个错误。
在你导入jquery文件后添加这个。
<script>
if($.browser.msie)
{
jQuery.find.selectors.attrHandle.type=function( elem ) {
try{return elem.getAttribute( "type" );}catch(e){return'';}
}
}
</script>
我意识到这是一个hack…但总比错误好。