2015-07-10 66 views
0

我有一个使用YII2 ActiveForm生成的表单。如果我选择某些选项,还有一些字段需要保留,或者如果选择其他选项,则需要删除它们。删除由YII2生成的表单中的字段ActiveForm

例如,我有一个下拉式AccountType,有两个选项“个人”和“公司”。 如果用户选择“个人”表单上的某些字段需要离开说公司名称,并且需要出现诸如名字,姓氏等其他字段。最初当显示表格时,只有帐户类型字段在那里。

下面

是我目前所面对的

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

任何帮助是极大的赞赏的代码。

+1

将其设置为服务器做到这一点,你将需要提交表单每次用户改变“AccountType”字段的值。这有点刺激。我建议为此使用JS。您可以编写一些代码来根据所选值显示/隐藏表单的某些部分。 – nterms

回答

1

您可以使用scenarios为,先在模型中定义它们比你可以在视图中使用一个if语句

if ($model->isAttributeActive('attribute_name')) { 

但像@nterms写道,如果你希望用户能够切换到客户端,JavaScript会更好。

定义方案还有助于验证(只有活动属性将被验证)。

p.s.不要忘记设置场景控制器

$model = new MyModel(['scenario'=>'my_scenario']); 
+0

是的,我试图用Javascript来解决它 – Amitabh

1

我会处理这件事的方式是使用jQuery隐藏和显示使用下拉的变化情况,

在JavaScript

假设的是,在选择2插件的数据是在阵列 例如以下形式:

[1=>"first-item",2=>"second-item",...] 

$(document).ready(function(){ 
var id= //check the id of the select2 

上使用铬的检查元素的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(); 
     ...... 
     } 
     } 
}) 

}) 

我希望你的想法,

对于选择2号,您可以通过

echo $form->field($modelAccMain, 'account_type') 
     ->widget(Select2::classname(), [ 
     'data' => $accountTypeArray, 
     'options' => ['placeholder' => 'Select account type',"id"=>"mypreffereid"], 
     ]);