yii2依赖自动完成小部件

我在表单中有两个字段:

field($model, 'bill_country')->widget(AutoComplete::className(), ['options' => ['class' => 'form-control'], 'clientOptions' => ['source' => $country_name]])->label('Country') ?> field($model, 'bill_zip')->widget(AutoComplete::className(), ['options' => ['class' => 'form-control'], 'clientOptions' => ['source' => '/city/list/+id']])->label('Zip') ?> 

根据第一个块的选择,我想改变第二个块的“源”。 + id是一个javascript变量…所以我想通过val()获取第一个自动完成的值,将其分配给var id,然后将此id传递给第二个的源。 我能这样做吗? 或者我应该使用其他选项?

谢谢!

你可以,但Yii2与它无关。 你在页面上这样做,在浏览器中,这是一个javascript问题。 查看页面,您将看到由Yii和小部件创建的代码,您不应使用自动自动完成,而是创建自己的代码来执行您想要的操作。

所以,代码:

 $this->registerJs(" var country = ''; $('#partner-bill_country').autocomplete({ select: function( event, ui ) { country = (ui.item.country_id); $('#partner-bill_zip').autocomplete({ source: '/city/list/'+country }); } }); $('#partner-bill_zip').autocomplete({ select: function(event, ui) { $('#partner-bill_city').val(ui.item.citname); } }); ", View::POS_READY, 'partner_script'); //initial arrays: $city_zip = frontend\models\City::find() ->select(['CONCAT(cit_zip, " ", cit_name) as label', 'cit_zip as value', 'cit_id as id', 'cit_name as citname']) ->asArray() ->all(); $country_name = frontend\models\Country::find() ->select(['CONCAT(country_code, " ", country_name) as label', 'country_name as value','id as country_id']) ->asArray() ->all(); ?> 
field($model, 'bill_country')->widget(AutoComplete::className(), ['options' => ['class' => 'form-control'], 'clientOptions' => ['source' => $country_name]])->label('Country') ?> field($model, 'bill_zip')->widget(AutoComplete::className(), ['options' => ['class' => 'form-control'], 'clientOptions' => ['source' => $city_name]])->label('Zip') ?>