1

这是我在stackoverflow 中的第一篇文章。我正在尝试迭代一个对象(我的实现是一个关联数组),该对象又具有一些属性。现在我希望从中构造另一个数组,以便将其用作 jquery 自动完成小部件中的本地源以进行搜索操作。现在的问题是我根据可用的文档使用 for in 循环......但是输出总是比原始对象少一。根本不执行涉及最后一个元素的迭代。下面是我用作输入的示例对象。

    SubTeachPair = object{"5CS1":{SubAbbrev:"CA-L",SubCode:"5CS1",SubName:"Computer Architecture",TeacherId:"1",TeacherName:"Ayush Pandey",label:"Computer Architecture",value:"5CS1"},"5CS2":{SubAbbrev:"CA-P",SubCode:"5CS2",SubName:"Computer Engg",TeacherId:"10",TeacherName:"MAyush Pandey",label:"Computer Engg",value:"5CS2"}}

它具有这种元素并且是动态生成的,因此属性名称是可变的。我写的循环结构是

    var SubSource = [];
                console.log(SubTeachPair);
                var count = 0;


                for(sub in SubTeachPair){
                    console.log(count);
                    SubSource[count] = {};
                    SubSource[count]['label']=SubTeachPair[sub]['label'];
                    SubSource[count]['value']=SubTeachPair[sub]['value'];    
                    count++;    
                }

但是,给定输入的结果仅为:

object{{ label: "Computer Architecture", value: "5CS1"}}

我在这里错过了什么吗?

编辑——产生输入对象的函数如下(由next按钮触发onclick)。

    $('#' + $(this).attr("id")).autocomplete({
                                           source : 'search',
                                           minLength : 1,
                                           change : function(event, ui) {
                                           if( typeof ui.item != 'undefined') {
                                           SubTeachPair[$(this).attr("id")] = {};
                                           //   console.log(ui.item);
                                           SubTeachPair[$(this).attr("id")]['value'] =  $(this).attr("id");
                                         SubTeachPair[$(this).attr("id")]['label'] = $('label[for="' + this.id + '"]').html();
                                           SubTeachPair[$(this).attr("id")]['SubCode'] = $(this).attr("id");
                                           SubTeachPair[$(this).attr("id")]['SubName'] =$('label[for="' + this.id + '"]').html();
                                           SubTeachPair[$(this).attr("id")]['SubAbbrev'] =$('label[for="' + this.id + '"]').attr('id');
                                           SubTeachPair[$(this).attr("id")]['TeacherId'] = ui.item.id;
                                            SubTeachPair[$(this).attr("id")]['TeacherName'] = ui.item.value;
                                        //  console.log(SubTeachPair);
                                            //window.SubTeachPair = SubTeachPair;

                                       }
                               }
                           });

我想我已经找到了错误的原因——作为输入的对象实际上是另一个使用 jquery autocomplete 的表单的输出。现在,当我在输入中输入内容然后单击建议时,建议会填充到文本输入中,但是如果我没有在输入文本之外单击并直接单击触发我的脚本的按钮,则会出现该错误。否则很好。有没有办法避免这种情况?

4

2 回答 2

2

在您的代码中,数组SubSourcecount没有定义,您必须声明:

var SubSource = [];
var count = 0`  

for(sub in SubTeachPair) {...}

http://jsfiddle.net/abu5C/

于 2012-08-20T12:08:25.810 回答
1

尝试这个:

SubSource[count] = {};

for(sub in SubTeachPair) {
    console.log(count);

    SubSource[count]['label']=SubTeachPair[sub]['label'];
    SubSource[count]['value']=SubTeachPair[sub]['value'];

    count++; 
}
于 2012-08-20T12:02:24.143 回答