2015-07-10 45 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"], 
     ]);