1

これは、stackoverflow での最初の投稿です。いくつかのプロパティを持つオブジェクト (私の実装は連想配列) を反復処理しようとしています。ここで、検索操作用のjqueryオートコンプリートウィジェットでローカルソースとして使用するために、別の配列を構築したいと考えています。今問題は、利用可能なドキュメントによると、ループ内で for を使用していることです...ただし、出力は常に元のオブジェクトよりも1つ少なくなります。最後の要素を含む反復はまったく実行されません。以下は、入力として使用しているサンプル オブジェクトです。

    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"}}

ここで何か不足していますか?

edit -- 入力オブジェクトを生成する関数は次のとおりです (次のボタンで 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 に答える