【问题标题】:JavaScript Tree issue on Internet ExplorerInternet Explorer 上的 JavaScript 树问题
【发布时间】:2014-02-03 13:22:06
【问题描述】:

我的 JavaScript 需要一些帮助。我的 JavaScript 代码不能在 Internet Explorer 8 上运行,它会在 IE 控制台上显示空白和一些错误代码,请建议我一些解决方案以使此 JavaScript 代码在 Internet Explorer 上运行。以下是小提琴的链接:

Fiddle


错误代码

SCRIPT438:对象不支持属性或方法“键” 文件:treelist.js,行:12,列:13


var dataSource = {
            "Watch": {
                "Titan": {},
                "parent": {
                    "leaf1": {},
                    "leaf2": {}
                },
            }
        },
    traverseObject = function (obj) {
        var ul = document.createElement("ul"),
            li;

        for (var prop in obj) {
            li = document.createElement("li");
            li.appendChild(document.createTextNode(prop));
            li.onclick = function(e) {
                var classNames = e.currentTarget.className;
                if (classNames.indexOf("hidden") == -1) {
                    e.currentTarget.className += "hidden";
                } else {
                    e.currentTarget.className = e.currentTarget.className.replace("hidden", "");
                }
                e.stopPropagation();
            }

            if (typeof obj[prop] == "object" && Object.keys(obj[prop]).length) {
                li.appendChild(traverseObject(obj[prop]));
            } else {
                li.className += "leaf";
            }
            ul.appendChild(li);
            console.log(ul);
        }
        return ul;
    };


window.onload = function () {
    document.getElementById("dvList1").appendChild(traverseObject(dataSource));
}

【问题讨论】:

  • 一般经验法则:如果您有错误代码或错误消息,请将其包含在您的问题中。
  • 但看起来问题在于您使用的是 IE8 中不存在的 JavaScript 功能。查看this link 了解更多信息。您已将此问题标记为jquery,但没有 jquery 代码。 jQuery 将是您的问题的合理解决方案,因为它会为您解决 X-Browser 的麻烦。
  • 错误代码是:SCRIPT438:对象不支持属性或方法“键”文件:treelist.js,行:12,列:13
  • 请查看Object.keys(obj[prop]).length这行代码。该错误明确指出Object 不支持名为“keys”的属性/方法。因此,您的代码中必须有一些地方使用名为“keys”的方法扩展Object。但我在你的代码中没有找到。
  • 是的,确实检查过了,仍然无法在 IE 上运行

标签: javascript jquery internet-explorer


【解决方案1】:

您的代码使用Object.keys(),这在 Internet Explorer 8 中不受支持(在 IE9 中引入了支持)。 MDN has more information,包括可用于解决问题的 polyfill。只需将其粘贴到相关的 Javascript 文件中即可。

正如Zach L 所指出的,您的代码也使用e.stopPropogation()。 IE8 也不支持这一点(同样,它是在 IE9 中引入的)。 MDN has more informationJonathan T. Neal has a polyfill 可以用来解决问题(这是文章末尾的 addEventListener 代码)。同样,只需将其粘贴进去。

【讨论】:

  • 他的建议是阅读 MDN 文章,其中包含解决您的问题所需的所有信息,包括带有简单代码 sn-p 的此链接。 tokenposts.blogspot.com.au/2012/04/… 请注意,Object.keys() 并不是代码中唯一不兼容 IE8 的东西。请查看the article I posted in the comments above 以获取有关e.stopPropagation() 的信息
  • @user3237973 我已经改写了答案。这样更好吗?
  • 谢谢...我正在检查它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 2012-08-12
相关资源
最近更新 更多