# Select ### Select Custom select control. ## Sizes ### Small size
### Large size
## Options ### Disable search Add the `select-no-search` CSS class to disable searching.
### Dynamic option creation In addition to a pre-populated menu of options, Select widgets may dynamically create new options from textual input by the user in the search box. This feature is called "tagging". To enable tagging, set the `tags` option to `true`: ## Option groups Use the `optgroup` element to create option groups. ## AJAX search Use the `data-handler` attribute to source the select options from an AJAX handler. ```html ``` The AJAX handler should return results in the [Select2 data format](https://select2.org/data-sources/formats). ```php public function onGetOptions() { return [ 'results' => [ [ 'id' => 1, 'text' => 'Foo' ], [ 'id' => 2, 'text' => 'Bar' ] ... ] ]; } ``` Or a more full-featured example: ```php public function onGetOptions() { return [ 'results' => [ [ 'id' => 1, 'text' => 'Foo', 'disabled' => true ], [ 'id' => 2, 'text' => 'Bar', 'selected' => true ], [ 'text' => 'Group', 'children' => [ [ 'id' => 3, 'text' => 'Child 1' ], [ 'id' => 4, 'text' => 'Child 2' ] ... ] ] ... ], 'pagination' => [ 'more' => true ] ]; } ``` The results array can be assigned to either the `result` or `results` key. As an alternative to the Select2 format, results can also be provided as an associative array (also assigned to either key). Due to the fact that JavaScript does not guarantee the order of object properties, we suggest the method above for defining results. ```php public function onGetOptions() { $results = [ 'key' => 'value', ... ]; return ['result' => $results]; } ```