2014-11-25 117 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