在multiselect 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 :(得分:2)
使用map()
创建阵列以及在每次更改时创建一个全新的阵列要容易得多,这样您就不必乱七八糟地找到阵列的特定元素去除。试试这个:
var optionValues = [];
$('#myselect').change(function() {
optionValues = $('option:selected', this).map(function() {
return this.value;
}).get();
$('#this').val(optionValues.join());
}).trigger('change');
答案 1 :(得分: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);
}
});
答案 2 :(得分:0)
$("#myselect").change(function() {
var optionValues = [];
$("select option:selected").each(function() {
optionValues.push($(this).val());
});
$('#this').val(optionValues.join());
}).trigger( "change" );