Bỏ qua để đến nội dung
PHP Ecosystem
Explore

Events, accessibility and lifecycle

Nội dung này hiện chưa có sẵn bằng ngôn ngữ của bạn.

Configure native callbacks with JsExpression, preserving the Selectize this instance:

use yii\web\JsExpression;
$clientOptions = [
'onChange' => new JsExpression('function (value) { console.log(value); }'),
'onItemAdd' => new JsExpression('function (value) { console.log(value); }'),
];

Or subscribe after initialization: control.on('change', handler) and unsubscribe with control.off('change', handler). Do not call off() without arguments on an active widget; that also removes its integration handlers. jQuery change on the original element continues to support Yii ActiveForm. setValue(value) triggers change; setValue(value, true) suppresses it. Multiple selects return arrays from getValue(); single selects and text inputs return strings.

Use a visible <label for="input-id">, unique IDs and descriptive help/error elements. The integration preserves Selectize’s label association with input-id-selectized, copies aria-label, aria-labelledby, aria-describedby and title to the visible input, and adds combobox/listbox roles, expanded state and active-option references. It mirrors required/disabled state and observes aria-invalid on the original field. Label targets are restored on destroy(), so reinitialization retains the association.

Connect server errors through aria-invalid and aria-describedby. Keep ActiveField::$addAriaAttributes enabled (the default). Yii 2.0’s jQuery ActiveForm client updates the original input’s aria-invalid; the wrapper observes that attribute and does not infer errors from CSS classes. Custom clients can set the same attribute in afterValidateAttribute.

Yii 22 defaults ActiveForm::$clientScript to null. Client validation needs an application-selected strategy, including validator strategies. For the official jQuery integration, install its available development branch and bootstrap it in the application:

Terminal window
composer require yiisoft/yii2-jquery:dev-master
'bootstrap' => [\yii\jquery\Bootstrap::class],

That optional Yii 22 package is not needed for Selectize itself or server validation. Test keyboard and screen-reader interaction in the consuming form, including any custom templates and plugins.

A selected single-value control is full in Selectize 0.15.2 and blocks typing. Clear its selection with Backspace or control.clear() before searching; provide an accessible clear button for touch users.

Selectize supports typing, arrow navigation, Enter, Escape and Tab. Check touch targets and focus at your application’s mobile breakpoint. A placeholder is not a label. Use control.disable() and control.enable() to change disabled state after initialization; changing only the original field does not synchronize Selectize.

The PHP widget registers jQuery(document.getElementById(id)).yiiSelectize(settings) on DOM ready. Calling yiiSelectize again on an existing instance is a no-op. It does not apply new settings to that instance. Use the same helper after replacing a fragment. Before removing a fragment, destroy each live instance:

fragment.querySelectorAll("select, input").forEach(function (element) {
if (element.selectize) {
element.selectize.destroy();
}
});

Destruction removes Selectize handlers and dropdowns, disconnects the ARIA observer and aborts the built-in remote request. Remove your own external listeners separately. For PJAX, destroy in pjax:beforeReplace and initialize after replacement; scope selectors to the container. Do not initialize every input on the page.

To reinitialize the same element while preserving edited values and loaded options:

var element = document.getElementById("article-topic");
var control = element.selectize;
var value = control.getValue();
var settings = Object.assign({}, control.settings, {
options: Object.values(control.options),
items: control.items.slice(),
render: control.settings_user.render,
});
control.destroy();
jQuery(element).yiiSelectize(settings);
element.selectize.setValue(value);

Upstream destruction restores the original option nodes, so save the current options and selection first when those should survive. Use the original settings_user.render templates so plugins such as remove_button do not wrap already-modified renderers again. clear() clears the selection; clearOptions() also removes available choices and resets search state. Neither destroys the widget. Keep IDs unique across independently configured widgets and tabular fields; an ID containing a colon is supported by the wrapper without a CSS selector.

See the native API for additional methods and configuration guide for loading and server-side data shapes.

Back to documentation