我有一个使用YII2 ActiveForm生成的表单。如果我选择某些选项,我需要有一些字段,或者如果我选择其他选项需要删除它们。
例如我有一个下拉帐户类型,有两个选项“个人”和“公司”。 如果用户选择“个人”,表单上的某些字段需要说明公司名称,并且需要显示其他一些字段,如名字,姓氏。最初显示表单时,只有“帐户类型”字段。
下面是我目前的代码
<?php
$form = ActiveForm::begin(['id' => 'account-setup-form']); ?>
echo $form->field($modelAccMain, 'account_type')
->widget(Select2::classname(), [
'data' => $accountTypeArray,
'options' => ['placeholder' => 'Select account type'],
]);
echo $form->field($modelUsers, 'firstname')->textInput()
->hint('')->label('First Name');
echo $form->field($modelUsers, 'lastname')->textInput()
->hint('')->label('Last Name');
<?php ActiveForm::end(); ?>
非常感谢任何帮助。
答案 0 :(得分:1)
您可以使用scenarios,首先在模型中定义它们,然后在视图中使用if语句
if ($model->isAttributeActive('attribute_name')) {
但是像@nterms写道,如果你希望用户能够在客户端开启,那么javascript会更好。
定义方案也有助于验证(仅验证活动属性)。
P.S。不要忘记在控制器中设置场景
$model = new MyModel(['scenario'=>'my_scenario']);
答案 1 :(得分:1)
我处理它的方式是使用jquery hide和show使用下拉列表的更改事件,
在你的javascript中
假设select 2小部件中的数据采用数组的形式 例如:
[1=>"first-item",2=>"second-item",...]
$(document).ready(function(){
var id= //check the id of the select2
使用chrome;检查元素id;
$("#id").on("change", function(){
if(id.value==1){
//show a div
}else{
//hide a div
}
//for multiple values better use switch
like this
switch(id){
case 1:{
$("#divid").show();
......
}
}
})
})
我希望你明白这个想法,
对于select 2 id,您可以通过
进行设置echo $form->field($modelAccMain, 'account_type')
->widget(Select2::classname(), [
'data' => $accountTypeArray,
'options' => ['placeholder' => 'Select account type',"id"=>"mypreffereid"],
]);