【问题标题】:yii2 dependent autocomplete widgetyii2 依赖的自动完成小部件
【发布时间】:2015-01-17 11:59:02
【问题描述】:

我在一个表单中有两个字段:

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

基于第一个块的选择,我想更改第二个块的“来源”。 +id 是一个javascript变量... 所以我想用 val() 获取第一个自动完成的值,将其分配给 var id,然后将此 id 传递给第二个的源。 我可以这样做吗? 还是我应该使用其他选项?

谢谢!

【问题讨论】:

    标签: jquery autocomplete widget yii2


    【解决方案1】:

    所以,代码:

    $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();
    ?>
    <div class="partner-form">
        <?php $form = ActiveForm::begin(); ?>
            <div class="row">
                <div class="col-lg-6">
                      <?= $form->field($model, 'bill_country')->widget(AutoComplete::className(), ['options' => ['class' => 'form-control'], 'clientOptions' => ['source' => $country_name]])->label('Country') ?>
                      <?= $form->field($model, 'bill_zip')->widget(AutoComplete::className(), ['options' => ['class' => 'form-control'], 'clientOptions' => ['source' => $city_name]])->label('Zip') ?>
    

    【讨论】:

    • 太棒了!工作正常!
    • 嗨,狡猾的好方法,我们可以更清楚地了解:-- 来源:'/city/list/'+国家(我认为它属于某人的行动)所以请澄清一下。
    • 哦,嗨@sprytechies,对不起,我没看到你问了什么...所以/city/list/+country 获取基于country id (parent id) 的城市列表。动作很简单,获取这个父级的子级...现在清楚了吗?
    【解决方案2】:

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

    【讨论】:

    • 是的,我就是这么做的!我想使用 yii2 的小部件来获取源代码,但它似乎不能使用 javascript 变量。我只想列出一个特定国家的邮政编码,这就是我使用 yii2 创建一个初始数组的原因。之后,我创建了 jquery 代码以从第一个自动完成中读取 id,并更新第二个(zip)的源数组。我将发布代码作为答案。
    猜你喜欢
    • 1970-01-01
    • 2015-12-15
    • 2015-10-04
    • 2017-11-24
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 2015-07-31
    相关资源
    最近更新 更多