Yii2: Показать поле / флажок после выбора флажка - PullRequest
0 голосов
/ 30 октября 2018

У меня есть ActiveForm в моем виде _form:

<?php $form = ActiveForm::begin(); ?> <?= $form->field($model, 'isInternal')->checkbox() ?> <?php ActiveForm::end(); ?>

(isInternal - логическое значение)

Если флажок установлен, я хочу показать другой флажок:

$form->field($model, 'activateReminder')->checkbox();

Есть ли возможность? Может быть, с таким JavaScript?

 <?= $form->field($model, 'isInternal')->checkbox(['onclick' =>
 'showInternDetails()']) ?> 

<script>
 function showInternDetails() {
 $model->isInternal = 1;
 } 
</script>

<?php 
if($model->isInternal == true)
{
$form->field($model, 'activateReminder')->checkbox();
}
?>

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

Вы можете использовать опции when и whenClient внутри объявленной вами модели rules, чтобы она работала при создании или обновлении как на конце модели, так и требуя показывать ошибку пользователю, которая ему нужна выберите значение для флажка, а также для одновременного отображения и скрытия activateReminder.

Итак, войдите в модель, которую вы используете с этой формой, и добавьте правило, как показано ниже.

public function rules(){
    return [
      [['activateReminder'],'required','when'=>function($model){return ($model->isInternal);},
      'whenClient'=>'function(attribute,value){
           if($("#'.\yii\helpers\Html::getInputId($this, 'isInternal').'").val()===1){
              $("#'.\yii\helpers\Html::getInputId($this, 'activateReminder').'").show();
              return true;
           }else{
              $("#'.\yii\helpers\Html::getInputId($this, 'activateReminder').'").hide();
           }
      }']
    ];
}
0 голосов
/ 06 ноября 2018

Спасибо за ваши ответы !! Я решил это следующим образом:

function isInternalOnClick(){ 
$('#isInternalCheckbox').on('change',function(){        showOrHideActivateReminder();});
}

function showOrHideActivateReminder() {
    if($('#isInternalCheckbox').is(':checked'))
    {
        $('#hiddenActivateReminder').show()
    }
    else{
        $('#hiddenActivateReminder').hide();
    }    
} 

$(document).ready(function() {
    <?php 
            if($model->isInternal)
            {
                echo "
                showOrHideActivateReminder();
                ";
            }
            ?>
});
0 голосов
/ 30 октября 2018

Вы можете сделать это с помощью JS:

<?php
$this->registerJs(
    "$('#myBox').on('change', function() { if($(this).is(":checked")){// Display your input...}else {// hide it} });",
    View::POS_READY
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...