【问题标题】:How to fix the IE issue 'parentNode' is null or not an object with Ext.js3.1.1?如何解决 IE 问题“parentNode”为空或不是 Ext.js3.1.1 的对象?
【发布时间】:2014-05-22 01:24:07
【问题描述】:

我在试图破坏 IE 上的 Extjs 3.1.1 窗口时遇到了这个问题。错误说:

  • 在 IE8 上:'parentNode' 为 null 或不是对象
  • 在 IE9 上:SCRIPT5007:无法获取属性“insertBefore”的值:对象为空或未定义 ext-all-debug.js,第 5533 行字符 10

它适用于其他浏览器。

此方法引发异常: Ext.element:insertAfter()

并且堆栈跟踪类似于this closed thread

组件层次结构如下所示(一些组件被扩展):

window > panel > EditorGrid > FormPanel > Combobox

【问题讨论】:

    标签: javascript internet-explorer dom extjs extjs3


    【解决方案1】:

    这个补丁修复了我的问题。它只是在调用其方法之前覆盖添加检查parentNode 的函数。我将此代码 sn-p 添加到在 Extjs 之后运行的 fixs.js 文件中。

    Ext.override(Ext.Element, {
    
        /**
        * Inserts this element after the passed element in the DOM
        * @param {Mixed} el The element to insert after
        * @return {Ext.Element} this
        *
        * @overrides  to fix IE issue of "parentNode null or not an object".
        */
        insertAfter: function(el){
            el = Ext.getDom(el);
            if (el && el.parentNode) {
                el.parentNode.insertBefore(this.dom, el.nextSibling);
            }
            return this;
        }
    });
    

    请注意,理想情况下我应该调查为什么elementparentNode 为空,但这个修复对我来说已经足够好了。可能其中一个扩展元素正在销毁窗口之前销毁子项。

    【讨论】:

    • 在我看来这是库中的一个错误,元素不一定有父元素(例如文档元素)。
    • 可能。 API for Ext.Element class 没有具体说明 parentNode
    猜你喜欢
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多