0

在多选 jquery 下拉列表中,我想要一个项目是否选中它进入一个数组,如果一个项目未选中,它会从该数组中删除。我做了:

var optionValues = [];
$("#myselect").change(function() {
    $("select option:selected").each(function() {
        optionValues.push($(this).val());
    });

    $('select option:not(:selected)').each(function() {
        itemtoRemove = $(this).val();
        optionValues.splice($.inArray(itemtoRemove, optionValues), 1);
    });
    $('#this').val(optionValues.join());
}).trigger( "change" ); 
<input type="text" id="this">

但它在文本框中没有显示任何内容。任何想法?

4

3 回答 3

2

使用它来创建您的数组并在每次更改时创建一个全新的数组要容易得多,map()因此您不必费心寻找要删除的数组的特定元素。尝试这个:

var optionValues = [];
$('#myselect').change(function() {
    optionValues = $('option:selected', this).map(function() {
        return this.value;
    }).get();
    $('#this').val(optionValues.join());
}).trigger('change');

示例小提琴

于 2014-11-25T09:50:39.570 回答
0
$("#myselect").change(function() {
var optionValues = [];
$("select option:selected").each(function() {
    optionValues.push($(this).val());
  });

 $('#this').val(optionValues.join());
}).trigger( "change" ); 

http://jsbin.com/gejigucimo/1/edit

于 2014-11-25T10:07:17.077 回答
0

问题是您没有检查是否有$.inArray(itemtoRemove, optionValues)回电。

$('select option:not(:selected)').each(function() {
        itemtoRemove = $(this).val();
        var index = $.inArray(itemtoRemove, optionValues);
        if(index != -1) {
            optionValues.splice(index,1);
        }
 });

http://jsfiddle.net/00shke8a/

于 2014-11-25T09:53:42.573 回答