Вот как я решил.
My select2 инициализируется существующим выбором с параметрами. Поэтому прежде всего я добавил новый атрибут к параметрам, которые представляют строку, которую я хочу фильтровать (в моем случае это «масштаб», в примере, который я представил в комментариях, будет «animalGroup»).
Затем я создал слушатель изменения событий на оригинальном выбор:
select.on('change', function() {
var currItems = $(this).val();
$(this).find('option').prop('disabled', false);
if (!(currItems == null || currItems === false)) {
var currScale = $(this).find("option[value='" + currItems[0] + "']").attr('scale');
$(this).find('option').prop('disabled', false);
$(this).find("option[scale='" + currItems[0] + "']").prop('disabled', false);;
$(this).parent().find('option').each(function() {
if (($(this).attr('scale') != currScale)) $(this).prop('disabled', true);
});
}
$(this).select2({
allowClear: true,
});
});
В позволяют все опции, а затем, если выбран по меньшей мере, один параметр, отключает все параметры, которые используют другой масштаб (или animalGroup). В конце select2 повторно инициализируется, чтобы поймать изменения в включенном/отключенном.
Читайте вопрос 4 раз. Мне это непонятно. Можете ли вы привести пример? – Eloims
У меня есть мультиселекция. Предположим, что у него есть множество животных на выбор (кошка, собака, белка, акула, окуня, сома). Сначала каждое животное доступно, но если я выберу собаку, то в качестве второго (или третьего) варианта можно выбрать только другое млекопитающее. Итак, согласно этому примеру: cat (OK), cat + dog (OK), собака + акула (NO), сома + акула + белка (НЕТ). Другими словами, мне нужно отфильтровать параметры мультиселектора с помощью фильтра, основанного на предыдущих вариантах. – Lorenzo