1

私がやりたいのは、JavaScript配列から複数のドロップダウンoptionの要素を生成することです。select別の配列(例では配列)の値と同じドロップダウンで各オプションを選択するよりもresults

問題は、結果配列に複数の要素がある場合、元のオプションが結果配列の要素数に対してHTMLで乗算されることです。

なぜこれが起こっているのかは理解していますが、現在使用しているものよりも優れた解決策を見つけることができないようです。これは次のようなものです。

var
options = ['Some value', 'Another value', 'Third value', 'Something completely different'],
results = ['Some value', 'Another value'],
selectHtml;

$.each( options, function( index, value ) {
    var option = value;

    $.each( results, function( index, value ) {
        if ( option === value ) {
            selectHtml += '<option selected="selected" value="' + option + '">' + option + '</option>';
        }
        else {
            selectHtml += '<option value="' + option + '">' + option + '</option>';
        }
    });
});

ここで実際の例を見つけることができます:http://jsfiddle.net/wCWyp/

私が達成したいのは同じことですが、要素の乗算はありません。

4

3 に答える 3

2

配列検索を実行します。

var 
options = ['Some value', 'Another value', 'Third value', 'Something completely different'],
results = ['Some value', 'Another value'],
selectHtml;

$.each( options, function( index, value ) {
    var option = value;
    if (results.indexOf(option) == -1){
        selectHtml += '<option value="' + option + '">' + option + '</option>';
    } else {
        selectHtml += '<option selected="selected" value="' + option + '">' + option + '</option>';
    }
});

$('#test').html( selectHtml );
于 2012-07-09T08:02:11.113 に答える
2

選択を生成してから実行するのはどうですか

 $("#selectId").val(results);

http://jsfiddle.net/mplungjan/kgJeQ/

var options = ['Some value', 
'Another value', 'Third value', 
'Something completely different'],
results = ['Some value', 'Another value'];

$("#selId").empty();
$.each( options, function( index, value ) {
    var text = value;
     $("#selId").append('<option value="' + value + '">' + text + '</option>');
});
$("#selId").val(results);
于 2012-07-09T08:05:30.367 に答える
1

results問題は、配列のすべての要素について配列を反復処理していることですoptions。このメソッドを使用してindexOf、電流optionresults配列にあるかどうかを判断できます。

$.each( options, function( index, value ) {
    selectHtml += '<option ' + (results.indexOf(value) > -1 ? 'selected' : '') + ' value="' + value + '">' + value + '</option>';
});

これが更新されたフィドルです。

ただし、Array.prototype.indexOfこれは古いブラウザでは使用できないため、ポリフィルを含めることをお勧めします。MDNは、上記のリンクで1つ提供しています。

于 2012-07-09T08:00:26.417 に答える