首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个递归方法在IE中会中断?使用JSON

为什么这个递归方法在IE中会中断?使用JSON
EN

Stack Overflow用户
提问于 2012-03-26 16:56:46
回答 1查看 127关注 0票数 0

在使用以下代码时,它可以在除IE之外的所有浏览器中运行,在IE中,它返回一个错误,指出行'if(dataitem.sub !== null)‘为空或未定义。我故意将JSON对象的sub属性设置为null,这样我就可以测试它,并确保有一个值与那个‘sub’属性相关联。只有IE在所有版本中都会中断。

代码语言:javascript
复制
            createDropDownCode: function(arr){
            // loop through li's of primary menu
            that.find("li").each(function(idx){

                $(this).append( menusort(arr.menu[idx].sub) );

                $('#PrimNav div.menu').hide();

                function menusort(data){
                    if(data !== null)
                        var html = "<div class='menu'><ul>";    

                    var data_count = 0;

                    for(item in data){

                        data.length-1 == data_count ? html += "<li class='last'>" : html += "<li>";

                        if(data[item].sub !== null){
                            if(typeof(data[item].sub) === 'object'){

                                html += "<a href='" + data[item].link + "'><span>" + data[item].name + "</span></a>";

                                if($.isArray(data[item].sub)){
                                    html += menusort(data[item].sub);
                                }
                            }
                        }

                        html += "</li>"
                        data_count += 1;

                    }

                    if(data !== null)
                        html += "</ul></div>";

                    return html;
                }

JSON传递给了'createDropDownCode‘函数....

代码语言:javascript
复制
var JSON = {
    menu: [
        {id: '0',sub: [
            {name: 'lorem ipsum 0-0',link: '0-0', sub: null},
            {name: 'lorem ipsum 0-1',link: '0-1', sub: null},
            {name: 'lorem ipsum 0-2',link: '0-2', sub: null}
            ]
        },
        {id: '1',sub: null},
        {id: '2',sub: [
            {name: 'lorem ipsum 2-0',link: '2-0', sub: null},
            {name: 'lorem ipsum 2-1',link: '2-1', sub: null},
            {name: 'lorem ipsum 2-2',link: '2-2', sub: [
                {name: 'lorem ipsum 2-2-0',link: '2-2-0', sub: null},
                {name: 'lorem ipsum 2-2-1',link: '2-2-1', sub: null},
                {name: 'lorem ipsum 2-2-2',link: '2-2-2', sub: [
                    {name: 'lorem ipsum 2-2-2-0',link: '2-2-2-0', sub: null},
                    {name: 'lorem ipsum 2-2-2-1',link: '2-2-2-1', sub: null},
                    {name: 'lorem ipsum 2-2-2-2',link: '2-2-2-2', sub: null},
                    {name: 'lorem ipsum 2-2-2-3',link: '2-2-2-3', sub: null}
                ]},
                {name: 'lorem ipsum 2-2-3',link: '2-2-3', sub: null},
                {name: 'lorem ipsum 2-2-4',link: '2-2-4', sub: null},
                {name: 'lorem ipsum 2-2-5',link: '2-2-5', sub: null},
                {name: 'lorem ipsum 2-2-6',link: '2-2-6', sub: null}
            ]},
            {name: 'lorem ipsum 2-3',link: '2-3', sub: [
                {name: 'lorem ipsum 2-3-0',link: '2-3-0', sub: null},
                {name: 'lorem ipsum 2-3-1',link: '2-3-1', sub: null},
                {name: 'lorem ipsum 2-3-2',link: '2-3-2', sub: [
                    {name: 'lorem ipsum 2-3-2-0',link: '2-3-2-0', sub: null},
                    {name: 'lorem ipsum 2-3-2-1',link: '2-3-2-1', sub: null},
                    {name: 'lorem ipsum 2-3-2-2',link: '2-3-2-2', sub: null},
                    {name: 'lorem ipsum 2-3-2-3',link: '2-3-2-3', sub: null}
                ]},
                {name: 'lorem ipsum 2-2-6',link: '2-3-3', sub: null}
            ]},
            {name: 'lorem ipsum 2-4',link: '2-4', sub: null},
            {name: 'lorem ipsum 2-5',link: '2-5', sub: null}
            ]
        },
        {id: '3',sub: null},
        {id: '4',sub: null},
        {id: '5',sub: null}
        ]
    }
EN

回答 1

Stack Overflow用户

发布于 2012-03-26 17:29:01

在JSON数据中,尝试使用false而不是null,在我看来,对象类型比较有点多。

代码语言:javascript
复制
if(data[item].sub) {

    html += "<a href='" + data[item].link + "'><span>" + data[item].name + "</span></a>";

    if($.isArray(data[item].sub)) {
        html += menusort(data[item].sub);
    }
}

编辑:好的,这不是答案。正如我在上面的评论中所说的,请在http://jsfiddle.net上发布一个工作(或不工作;)的示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9869171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档