我在IE < 9中看到了"SCRIPT3:Member not found."错误。从各个位置(如Member not found IE error (IE 6, 7, 8, 9))来看,它似乎发生在.hover()
部分内的setTimeout
中。
我按照指南进行了操作,但仍然遇到了同样的问题。我将非常感谢任何帮助。
可能还会在change()
函数内的某些地方发生。
我已经将整个代码放置在:http://jsfiddle.net/f4tZQ/
我在IE < 9中看到了"SCRIPT3:Member not found."错误。从各个位置(如Member not found IE error (IE 6, 7, 8, 9))来看,它似乎发生在.hover()
部分内的setTimeout
中。
我按照指南进行了操作,但仍然遇到了同样的问题。我将非常感谢任何帮助。
可能还会在change()
函数内的某些地方发生。
我已经将整个代码放置在:http://jsfiddle.net/f4tZQ/
对于那些不想修改jQuery源代码的人(求求你们别这么做)...
在触发自定义事件时,ie<9会出现这种情况。如果您能在ie崩溃之前访问该事件,请沿着originalEvent链向下移动并将最后一个设置为 = {};
以下代码是针对当您依靠jQuery处理事件处理程序返回值(false
)时的情况。如果您想在此处取消事件,请参见注释 - 在try/catch块中包装对e.stopPropagation()
的调用。
var handleAndFire = function(e) {
var ev = new $.Event('stack.overflow');
//you may have to debug and manually inspect to see how
//deep the originalEvents go
//or you could write your own function to traverse
//depth first and find it automatically, I'm lazy.
e.originalEvent.originalEvent = {}; //fix for ie < 9
ev.originalEvent = e;
$(document).trigger(ev);
}
$(document).click(handleAndFire);
e.originalEvent.originalEvent
在我的情况下破坏了 stopPropagation()
调用(没有崩溃,但也没有停止传播),这也是最初导致崩溃的原因。最终,我通过在 try/catchall 中包装调用来解决了这个问题:try { event.stopPropagation(); } catch (e) {}
- Simon在一段时间的搜索后,我似乎受到了jQuery的bug的影响。根据“评论:4”的建议,更改jQuery-1.6.2.js文件中的第3172行解决了问题。
if (typeof e.cancelBubble !== 'unknown') { e.cancelBubble = true; }
不要问为什么,但它有效...由于某种原因,jQuery或IE在这里返回“unknown”,而不是“undefined”。
来源:
e.cancelBubble = true;
并插入了if (typeof e.cancelBubble !== 'unknown') { e.cancelBubble = true; }
。换句话说,对原始的jquery文件进行了轻微修改。 - maan81e.cancelBubble = true;
并插入了if (typeof e.cancelBubble !== 'unknown') { e.cancelBubble = true; }
。 - maan81