何百行ものコードなしでこれを説明するのは非常に難しいですが、試してみます!
子オブジェクトの配列を含む親オブジェクトがあります。親は、この関数を使用して複数の選択要素をページに書き込みます
function writecollectionmultiselect(name,displayname,selectedrange){
// Create select page element
var collection = $("<select/>");
collection.attr("name",name);
collection.attr("MULTIPLE","multiple");
// Loop over elements in this collection and ask them to draw themselves
for(var i=0; i<this.objectarray.length;i++){
collection.append(this.objectarray[i].writemultioption(selectedrange));
}
return collection;
}
親は、id が「selectedrange」内にあるかどうかに応じて、各子に独自のオプション要素を描画するように要求します。
function writemultioption(selectedrange){
var option = $("<option/>");
option.val(this.data.id);
option.html(this.data.name);
if(selectedrange.indexOf(parseInt(this.data.id)) >= 0){
option.attr('selected', 'selected');
}
return option;
}
selectedrange が selectedrange=[1,2,3] として提供されている場合、これは正常に機能しますただし、jquery を使用してページ要素の選択された値を読み取ると
selectedrange = $('[name='+myname+"]").val();
最初の関数を呼び出そうとすると、indexOf 関数は完全に失敗したようです。このデバッグコード行を追加しました
alert("looking for "+this.data.id+" in "+selectedrange+" result "+selectedrange.indexOf(parseInt(this.data.id)))
セレクターを最初に描画すると、次のようになります。
1,2,3 中 1 を探します 結果 0
ただし、値を読み取って再描画すると、
1,2,3 中 1 を探している結果 -1
ある種のデータ型の問題が疑われますが、これに対して何時間も頭を悩ませてきました。どんな助けでも感謝します。