Я рендеринг select2 с помощью karthik yii2 виджет. Я использую обновленную версию.
Я попытался установить начальное значение с помощью initSelection, он работает нормально. Но когда я пытаюсь добавить другое значение, оно изменяет предварительно выбранное значение на ID, который был установлен через initSelection.
<?php
$initScript = <<< SCRIPT
function (element, callback) {
var id = \$(element).val();
if (id !== "") {
var url = "{$url}";
\$.ajax(url.replace('idreplace', id), {dataType: "json"}).done(
function(data) {
callback(data.results);
});
}
}
SCRIPT;
echo Select2::widget([
'language' => 'en',
'name' => 'to',
'value' => ['1'],
'options' => [
'placeholder' => 'Choose...',
'id' => "to",
'multiple' => true,
'data-validation'=>'required',
],
'pluginOptions' => [
'language' => [
'errorLoading' => new JsExpression("function () { return 'Waiting for results...'; }"),
],
'allowClear' => true,
'minimumInputLength' => 3,
'multiple' => true,
'ajax' => [
'url' => $url,
'dataType' => 'json',
'tags' => true,
'data' => new JsExpression('function(params) { return {search:params.term}; }'),
'results' => new JsExpression('function(data,page) {return { results:data.results }; }'),
],
'initSelection' => new JsExpression($initScript)
],
]);
?>
Наконец я решил свою проблему. initselection устарела в select2 4.0. я попытался установить начальное значение, используя «initValueText»
echo Select2::widget([
'language' => 'en',
'initValueText' => ['intialvaluetext'],//text of initial value
'name' => 'to',
'value' => ['1'],//matching id for initial value text
'options' => [
'placeholder' => 'Choose...',
'id' => "to",
'multiple' => true,
'data-validation'=>'required',
],
'pluginOptions' => [
'language' => [
'errorLoading' => new JsExpression("function () { return 'Waiting for results...'; }"),
],
'allowClear' => true,
'minimumInputLength' => 3,
'multiple' => true,
'ajax' => [
'url' => $url,
'dataType' => 'json',
'tags' => true,
'data' => new JsExpression('function(params) { return {search:params.term}; }'),
'results' => new JsExpression('function(data,page) {return { results:data.results }; }'),
],
],
]);
?>
Других решений пока нет …