これは、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 を使用する別のフォームの出力です。入力に何かを入力して提案をクリックすると、テキスト入力に提案が入力されますが、入力テキストの外側をクリックせずにスクリプトをトリガーするボタンを直接クリックすると、そのエラーが発生します。それ以外の場合は問題ありません。それを回避する方法はありますか?