Yii2:选中复选框后显示字段/复选框

时间:2018-10-30 16:21:24

标签: checkbox yii2

我的_form视图中有一个ActiveForm:

<?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 :(得分:1)

您可以通过JS做到这一点:

<?php
$this->registerJs(
    "$('#myBox').on('change', function() { if($(this).is(":checked")){// Display your input...}else {// hide it} });",
    View::POS_READY
);

答案 1 :(得分:1)

您可以在已声明的模型when中使用whenClientrules选项,以便在模型端创建或更新时都可以使用该选项,以显示和显示错误。用户需要选择复选框的值,并同时显示和隐藏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();
           }
      }']
    ];
}

答案 2 :(得分:0)

谢谢您的回答! 我已经解决了,如下所示:

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();
                ";
            }
            ?>
});