2014-11-25 2 views
0

В раскрывающемся списке jQuery multiselect я хочу, чтобы элемент проверял его на массив, и если элемент не отмечен, он удаляется из этого массива. Я сделал:выберите и снимите выделение из выпадающего списка

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

ответ

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

я хочу на отмените его удалить из массива –

+0

Этот код делает это. Проверьте скрипт для демонстрации. –

+0

Это здорово. Большое спасибо! Я приму это после 8 минут –

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

Смежные вопросы