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方法来确定当前option是否在results数组中:

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

这是一个更新的小提琴

但是,请记住,这Array.prototype.indexOf在旧浏览器中不可用,因此您可能希望包含一个 polyfill。MDN 在上面的链接中提供了一个。

于 2012-07-09T08:00:26.417 回答