1

何百行ものコードなしでこれを説明するのは非常に難しいですが、試してみます!

子オブジェクトの配列を含む親オブジェクトがあります。親は、この関数を使用して複数の選択要素をページに書き込みます

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

ある種のデータ型の問題が疑われますが、これに対して何時間も頭を悩ませてきました。どんな助けでも感謝します。

4

2 に答える 2

1

jQueryは文字列の配列を提供し、比較が厳密であるため、this.data.idを使用して数値に変換しているparseIntため、一致することはありません。indexOf

1 つの解決策は、文字列の配列を数値に変換することです。

selectedrange = $.map($('[name='+myname+"]").val(), function(n) { 
                                                        return parseInt(n, 10);
                                                    });

または別の解決策は、配列を文字列として保持することですが、を取り除き、parseIntこれを行うだけです。

if(selectedrange.indexOf(this.data.id) >= 0){
于 2012-08-16T15:41:34.377 に答える
0

関数はパラメータとして文字列を取ります。indexOf()整数を渡す例では、次を呼び出さないでくださいparseInt()

alert("looking for " + this.data.id + " in " + selectedrange + "result" + selectedrange.indexOf(this.data.id))
                                                                                      // no parseInt() here

また、取得する理由は、検索している文字列に一致するものが見つからない場合に関数が戻る-1ためです。indexOf()-1

于 2012-08-16T15:44:34.033 に答える