我有一个使用YII2 ActiveForm生成的表单。有一些领域,我需要是在如果我选择某些选项,或需要有他们删除,如果我选择一些其他选项。
例如,我有一个下拉帐户类型,有两个选项"个人"answers"公司"。如果用户选择"个人",则表单上的一些字段(如公司名称)需要消失,而其他一些字段(如名、姓)需要出现。最初当显示表单时,只有Account Type字段在那里。
下面是我现在的代码
<?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(); ?>
非常感谢任何帮助。
你可以使用场景,首先在你的模型中定义它们,然后你可以在你的视图中使用if语句
if ($model->isAttributeActive('attribute_name')) {
但是就像@nterms写的那样,如果你想让用户能够在客户端切换,javascript会更好。
定义场景还有助于验证(只有活动属性将被验证)。
注。不要忘记在控制器
中设置场景。$model = new MyModel(['scenario'=>'my_scenario']);
我将使用jquery隐藏和显示的方式使用下拉菜单的更改事件,
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"],
]);