IE < 9显示“成员未找到”错误

11

我在IE < 9中看到了"SCRIPT3:Member not found."错误。从各个位置(如Member not found IE error (IE 6, 7, 8, 9))来看,它似乎发生在.hover()部分内的setTimeout中。

我按照指南进行了操作,但仍然遇到了同样的问题。我将非常感谢任何帮助。

可能还会在change()函数内的某些地方发生。

我已经将整个代码放置在:http://jsfiddle.net/f4tZQ/


你能把你的编辑添加为答案吗? - user69820
在jquery-1.6.2.js文件中,第3172行,我注释掉了e.cancelBubble = true;并插入了if (typeof e.cancelBubble !== 'unknown') { e.cancelBubble = true; }。换句话说,对原始的jquery文件进行了轻微修改。 - maan81
抱歉。想要添加代码:注释掉了 e.cancelBubble = true; 并插入了 if (typeof e.cancelBubble !== 'unknown') { e.cancelBubble = true; } - maan81
2个回答

8

对于那些不想修改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);

2
很好。我发现修改 e.originalEvent.originalEvent 在我的情况下破坏了 stopPropagation() 调用(没有崩溃,但也没有停止传播),这也是最初导致崩溃的原因。最终,我通过在 try/catchall 中包装调用来解决了这个问题:try { event.stopPropagation(); } catch (e) {} - Simon
这是一个很好的解决方案,可以调用event.stopPropagation(),但如果您返回false并让jQuery自行停止,则无法帮助。 - scaryman

6

在一段时间的搜索后,我似乎受到了jQuery的bug的影响。根据“评论:4”的建议,更改jQuery-1.6.2.js文件中的第3172行解决了问题。

if (typeof e.cancelBubble !== 'unknown') { e.cancelBubble = true; } 

不要问为什么,但它有效...由于某种原因,jQuery或IE在这里返回“unknown”,而不是“undefined”。

来源:

源自:http://bugs.jquery.com/ticket/10004


请查看我的问题以获取有关IE中的“unknown”的更多信息:https://dev59.com/Xmgu5IYBdhLWcg3w6rM9 - Brett Postin
3
修改jQuery是一个不好的主意。 - Ammi J Embry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接