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

$.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 に答える