Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从下拉列表中选择和取消选择_Javascript_Jquery_Jquery Multiselect - Fatal编程技术网

Javascript 从下拉列表中选择和取消选择

Javascript 从下拉列表中选择和取消选择,javascript,jquery,jquery-multiselect,Javascript,Jquery,Jquery Multiselect,在multiselect jquery下拉列表中,我想知道一个项目是否选中,它是否会进入一个数组,如果一个项目未选中,它将从该数组中删除。我做到了: var optionValues = []; $("#myselect").change(function() { $("select option:selected").each(function() { optionValues.push($(this).val()); }); $('select op

在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" ); 


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

使用
map()
创建数组以及在每次更改时创建一个全新的数组要容易得多,这样您就不必费劲地查找要删除的数组的特定元素。试试这个:

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

问题在于您没有检查
$.inArray(itemtoRemove,optionValues)调用的返回

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


我想在取消选中时将其从阵列中删除此代码会执行此操作。检查小提琴进行演示。那太好了。非常感谢你!我会在8分钟后接受它,因为在每个循环的第二个循环中,你要从数组中删除所有内容,所以它总是空的
$("#myselect").change(function() {
var optionValues = [];
$("select option:selected").each(function() {
    optionValues.push($(this).val());
  });

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