Yii2: Как отключить или только прочитать виджет Select2?

Я использую виджет на основе select2.github.io, и мне нужно, чтобы он был доступен только для чтения, поэтому пользователь может видеть вариант выбора по умолчанию, но его нельзя изменить, и я думаю, что этот виджет не имеет этой опции.

Есть ли общее решение для любого виджета Select2?

$form->field($model, 'id_color')->widget(Select2::classname(), [
    'items' => ['1' => 'blue', '2' => 'red', '3' => 'yellow']
])

person Roby Sottini    schedule 03.06.2019    source источник


Ответы (4)


Что ж, есть опция с именем disabled, которую можно передать как true или false, что приводит к отображению отключенного выбора или включения.

<?php echo $form->field($model, 'id_color')->widget(Select2::classname(), [
        'items' => ['1' => 'blue', '2' => 'red', '3' => 'yellow']
        'pluginOptions' => [
            'disabled' => true
        ]
    ]);
?>

НО, прежде чем использовать его, вы должны знать, что отключенные входные данные не отправляются вместе с формой как часть массива сообщений, а свойство readonly `был удален в 4.0 и более поздних версиях. Таким образом, вам, возможно, придется сделать обходной путь, добавив скрытый ввод для отключенного выбора, который содержит идентификатор для текущего выбранного параметра для отключенного select2.

так что добавьте следующее в свою форму, и все готово

<?php echo $form->field($model, 'id_color')->hiddenInput() ?>
person Muhammad Omer Aslam    schedule 03.06.2019

Используйте pluginEvents, чтобы отключить.

$form->field($model, 'id_color')->widget(Select2::classname(), [
    'data' => ['1' => 'blue', '2' => 'red', '3' => 'yellow'],
    'options' => ['class' =>'myclass'],
    'pluginEvents' => [
        "select2:opening" => "function() { $('.myclass').attr('disabled', true); }",
    ], 
]);
person Prathap Goud Gantena    schedule 06.06.2019

Попробуйте метод CSS, если хотите ..

<?= $form->field($model, 'id_color')->widget(Select2::classname(), [
    'data' => ['1' => 'blue', '2' => 'red', '3' => 'yellow'],
    'readonly' => true,
]); ?>


<style type="text/css">
select[readonly].select2-hidden-accessible + .select2-container {
  pointer-events: none;
  touch-action: none;

  .select2-selection {
    background: #eee;
    box-shadow: none;
  }

  .select2-selection__arrow,
  .select2-selection__clear {
    display: none;
  }
}
</style>
person CrystalSword    schedule 06.06.2019

Для Select2 вы можете использовать атрибут 'только для чтения' для 'options'

'options' => [
    'readonly' => true
],

Например

echo $form->field($model, 'sazba')->widget(Select2::classname(), [
    'data' => $listData,
    'options' => [
        'placeholder' => '--- Vyberte ---',
        'multiple' => false,
        'class' => 'hide',
        'id' => 'all_sazba',
        'value' => $model->sazba,
        'readonly' => true
    ],
    'pluginOptions' => [
        'allowClear' => true
    ],
]);
person YurgenTM    schedule 08.01.2021
comment
Добро пожаловать в StackOverflow. Хотя этот код может решить вопрос, в том числе объяснение того, как и почему это решает проблему, действительно поможет улучшить качество вашего сообщения и, вероятно, приведет к большему количеству голосов за. Помните, что вы отвечаете на вопрос для будущих читателей, а не только для человека, который задает его сейчас. Пожалуйста, отредактируйте свой ответ, чтобы добавить - person Federico Baù; 08.01.2021