Показать optgroup в выбранных значениях в selctize.js
У нас есть поле выбора, в котором можно выбрать несколько значений. Эти значения сгруппированы в optgroups. Чтобы облегчить понимание, некоторые значения могут быть в нескольких optgroups, мы хотели бы видеть имя optgroup в метках для выбранных полей. Как мы можем сделать это?
См. Следующую скрипку: если вы выбираете "Первый элемент", вы не знаете, какой из них был выбран, "Магазин" или "Склад".
Спасибо!
https://jsfiddle.net/4t8fjj7g/1/
HTML:
<select name="test" id="test-select" multiple="multiple">
<optgroup label="Store">
<option data-type="stores" value="1">First item</option>
<option data-type="stores" value="2">Second item</option>
</optgroup>
<optgroup label="Warehouse">
<option data-type="warehouses" value="3">First item</option>
<option data-type="warehouses" value="4">Second item</option>
</optgroup>
</select>
И это код JavaScript:
$('select#test-select').selectize({
searchField: ['text', 'type']
});
1 ответ
По сути, то, что предложил Даффи, НО... Вы можете использовать пользовательские функции рендеринга для выпадающих опций и для выбранных элементов:
$('select#test-select').selectize({
searchField: ['text', 'type'],
render: {
item: itemRenderFunction,
option: optionRenderFunction
}
});
Это позволит вам избежать умножения меток в списке выбранных элементов.
Что я сделал, так это то, что значения имеют optgroup, а затем значение вроде optgroup_value
затем, когда форма отправляется на сервер или выполняется что-то в JS, я могу получить ее, взорвав строку, например:
<select multiple class="my-select">
<optgroup label="taxes">
<?php foreach ( $taxes as $tax) : ?>
<option value="tax_<?php echo $tax->slug; ?>"><?php echo $tax->name; ?></option>
<?php endforeach; ?>
</optgroup>
<optgroup label="Version">
<?php foreach ( $my_versions as $version ) : ?>
<option value="version_<?php echo $version->slug; ?>"><?php echo $version->name; ?></option>
<?php endforeach; ?>
</optgroup>
<optgroup label="Language">
<?php foreach ( $my_languages as $language ) : ?>
<option value="language_<?php echo $language->slug; ?>"><?php echo $language->name; ?></option>
<?php endforeach; ?>
</optgroup>
</select>
тогда
<?php
foreach ( $_POST['taxes'] as $val ) {
if ( ! empty( $val ) ) {
// $val_parts is an array with
// $val_parts[0] = optgroup only
// $val_parts[1] = the value of the option minus optgroup
$val_parts = explode( "_", $val );
// My use case to add a meta_query to a WP_Query so add filter based on both values
$meta_arg = array(
'taxonomy' => "my_" . $val_parts[0], // custom prefix then optgroup
'field' => 'slug',
'terms' => $val_parts[1] // value
);
// Add to running array and possibly do again
array_push( $args['tax_query'], $meta_arg );
}
}