У меня наконец есть ответ. Я изменил select
и добавил классы к каждому optgroup
и option
. Классы:
- optgroup : "TIPO_" + метка
- опция : "tipo_" + метка
<select name="AGREGA_PRODUCTO" id="AGREGA_PRODUCTO" multiple="" tabindex="-1">
<option value="" disabled="" selected="">Seleccione uno o más</option>
<optgroup label="FRASCO" class="TIPO_FRASCO">
<option value="'9'" class="tipo_FRASCO">100</option>
<option value="'2'" class="tipo_FRASCO">15</option>
<option value="'3'" class="tipo_FRASCO">25</option>
<option value="'5'" class="tipo_FRASCO">30 C</option>
<option value="'4'" class="tipo_FRASCO">30 Y</option>
<option value="'8'" class="tipo_FRASCO">60 B</option>
<option value="'7'" class="tipo_FRASCO">60 C</option>
<option value="'6'" class="tipo_FRASCO">60 Y</option>
</optgroup>
<optgroup label="DIFUSOR" class="TIPO_DIFUSOR seleccionado">
<option value="'17'" class="tipo_DIFUSOR">100 CAM - AMB</option>
<option value="'18'" class="tipo_DIFUSOR">180 DIF - AMB</option>
<option value="'19'" class="tipo_DIFUSOR">180 DIF - AMB BMX</option>
<option value="'20'" class="tipo_DIFUSOR">180 DIF - FRA</option>
<option value="'21'" class="tipo_DIFUSOR">180 DIF - FRA BMX</option>
<option value="'10'" class="tipo_DIFUSOR">50 CER - AMB</option>
<option value="'11'" class="tipo_DIFUSOR">50 CER - FRA</option>
<option value="'12'" class="tipo_DIFUSOR">50 ELECTRICO - AMB</option>
<option value="'13'" class="tipo_DIFUSOR">50 ELECTRICO - FRA</option>
<option value="'16'" class="tipo_DIFUSOR">60 CAM - AMB</option>
<option value="'14'" class="tipo_DIFUSOR">60 DIF - AMB</option>
<option value="'15'" class="tipo_DIFUSOR">60 DIF - FRA</option>
</optgroup>
<optgroup label="CREMA" class="TIPO_CREMA">
<option value="'23'" class="tipo_CREMA">CRE 50</option>
</optgroup>
<optgroup label="DESODORANTE" class="TIPO_DESODORANTE">
<option value="'22'" class="tipo_DESODORANTE">DES 50</option>
</optgroup>
</select>
Итак, я сделал эту функцию:
function cargaInicial(){
$(".optgroup").click(function(){
var clase = $( this ).find("span").text();
if($(".TIPO_"+clase).eq(0).hasClass("seleccionado")){
$(".TIPO_"+clase).removeClass("seleccionado");
$(".tipo_"+clase).prop("selected",false).parents("select").formSelect();
}else{
$(".TIPO_"+clase).addClass("seleccionado");
$(".tipo_"+clase).prop("selected",true).parents("select").formSelect();
}
cargaInicial();
})
}
cargaInicial();
Когда я выбираю всю группу, он добавляет класс "seleccionado" к optgroup
, чтобы я мог знать, если выбрано или нет. Каждый раз, когда я нажимаю на него, я должен заново назначать событие каждому классу optgroup.
Конечно, это работает, потому что мои метки - это отдельные слова, если у вас есть классы с несколькими словами, вы должны заменить каждый пробел другим символом.
Это было решением, которое я нашел. Если бы у кого-то было лучшее решение, это было бы очень здорово!