2014-11-25 87 views
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"> 

,但它说明不了什么在文本框中。任何想法?

+0

你从第二每次循环排列消除一切,所以它总是空 – adeneo 2014-11-25 09:52:38

回答

2

使用map()来创建阵列并在每次更改时创建一个全新的阵列会更容易,因此您不必乱七八糟寻找要删除的阵列的特定元素。试试这个:

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

Example fiddle

+0

我希望在取消选中它从数组 – 2014-11-25 09:51:51

+0

此代码删除这样做。检查小提琴演示。 – 2014-11-25 09:52:11

+0

太棒了。非常感谢你!我会在8分钟后接受它 – 2014-11-25 09:53:23

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/

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