JQuery - флажок включить / отключить - с БД - PullRequest
0 голосов
/ 15 октября 2019

Я бы хотел реализовать решение вопроса: jQuery - флажок включения / выключения в yii2, просто перевернут и объединен с БД. Обратное означает: у меня есть несколько флажков, и если флажок irep установлен, все остальные флажки должны быть отключены, иначе они должны быть включены. Итак, я поменял местами $("input.irep").attr("disabled", true); и $("input.irep").removeAttr("disabled");.

irep хранится в БД (как значение bool / tinyint 1), и если я открою форму, поля, которые должны быть отключены,все еще будут включены, даже если я добавлю 'disabled' => $model->irep к нему. Если я удаляю остальное, это почти нормально, но снятие отметки не приводит к повторному включению других флажков. Можете ли вы указать мне правильное направление? Спасибо.

Форма:

$script = <<< JS

$(function() {
  enable_cb();
  $("#irep").click(enable_cb);
});

function enable_cb() {
  if (this.checked) {
    $("input.irep").attr("disabled", true);
  } else {
    $("input.irep").removeAttr("disabled");
  }
}

JS;
$this->registerJs($script);

<?= $form->field($model, 'irep')->checkbox(['id' => 'irep']) ?>
<?= $form->field($model, 'intfg')->checkbox(['class' => ['irep'], 'disabled' => $model->irep]) ?>
<?= $form->field($model, 'extfg')->checkbox(['class' => ['irep'], 'disabled' => $model->irep]) ?>

1 Ответ

1 голос
/ 16 октября 2019

Используйте .prop вместо .attr см. здесь почему

Добавьте атрибут disabled только в том случае, если $model->irep равно 1 при добавлении атрибутазначение не имеет значения, либо атрибут должен присутствовать, либо значение 1 или 0 в значении не будет иметь никакого значения, если бы disabled было бы таким же.

Тогда почему вывызывая enable_cb() в начале скрипта при загрузке, вы используете эту функцию для события click для #irep проверка внутри функции, которая является this.checked, не влияет на загрузку страницы с отдельным вызовомфункция будет иметь this, указывающую на объект window вместо флажка.

И избегайте использования .click и предпочитайте .on('click' вместо делегирования события.

ваш код долженвыглядеть ниже

$script = <<< JS
$(function(){
    $("#irep").on('click',enable_cb);
});

function enable_cb() {
  if (this.checked) {
    $(".irep").prop("disabled", true);
  } else {
    $(".irep").prop("disabled",false);
  }
}
JS;

$this->registerJs($script);

//add disabled attribute
$disabled = $model->irep ? 'disabled' : '';

<?= $form->field($model, 'irep')->checkbox(['id' => 'irep']) ?>
<?= $form->field($model, 'intfg')->checkbox(['class' => ['irep'], $disabled=>'']) ?>
<?= $form->field($model, 'extfg')->checkbox(['class' => ['irep'], $disabled =>'']) ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...