【问题标题】:Autocomplete in yii2yii2中的自动完成
【发布时间】:2014-06-06 14:35:40
【问题描述】:

在 Yii2 中,我希望我的输入字段之一在用户开始输入时自动完成。下面是我使用 Jui Autocomplete 的代码。

 <?php
    $items= ArrayHelper::map(Company::find()->all(), 'c_id', 'name');
    echo AutoComplete::widget([
    'model' => $model,
    'attribute' => 'company',
    'clientOptions' => [
    'source' => $items,
     ],
    ]);?>

这不起作用。当我打印我的数组时,我喜欢

 Array ( [1] => abc [2] => xyz [4] => pqr )

当我手动设置时,我得到了它的工作

 $items=['abc','xyz','pqr'];

原因可能是我的c_id's 没有订购?但我想提交c_id 值!知道如何解决这个问题吗?

【问题讨论】:

标签: php autocomplete yii2


【解决方案1】:

我想使用 Jui 自动完成功能,这样当我点击或关注自动完成文本框时,它应该会显示选项。

我写了以下代码,它似乎正在工作

 $floorOptionsArray = ['Basement', 'Ground Floor', 'First floor', 'Second floor', 'Third floor'];
//    $floorOptionsArray = array_combine($floorOptionsArray, $floorOptionsArray);

$model = new Customer();

echo $form->field($model, 'floor')
    ->widget(\yii\jui\AutoComplete::classname(), [
        'value' => (!empty($model->floor) ? $model->floor : ''),
        'clientOptions' => [
            'source' => $floorOptionsArray,
            'enabled' => true,
            'minLength' => 0
        ],

        'options' =>
            [
                'placeholder' => 'Floor',
                'class' => 'form-control autocomplete-input-bg-arrow ',

                'onclick' => "(function ( ) {
                      $( '#customer-floor' ).autocomplete( 'search', '' );
                                })();",

                'onfocus' => "(function ( ) {
                      $( '#customer-floor' ).autocomplete( 'search', '' );
                                })();",
            ],
    ])->label(true);

【讨论】:

    【解决方案2】:

    这可以在隐藏字段输入的帮助下解决。希望这会对某人有所帮助!

        <?php
        use yii\web\JsExpression;
    
        $data = Company::find()
        ->select(['name as value', 'name as  label','c_id as id'])
        ->asArray()
        ->all();
    
        echo AutoComplete::widget([
        'name' => 'Company',
        'id' => 'ddd',
        'clientOptions' => [
            'source' => $data,
            'autoFill'=>true,
            'minLength'=>'4',
            'select' => new JsExpression("function( event, ui ) {
                    $('#user-company').val(ui.item.id);
                }")
            ],
         ]);
         ?>
    
        <?= Html::activeHiddenInput($model, 'company')?>
    

    【讨论】:

    • 嗨 Dency - 我已经尝试使用自动完成小部件和您的建议。它工作正常,但在更新时该字段显示为空白。我错过了什么吗?
    【解决方案3】:

    自动完成功能只是帮助您在字段中填写所需的值。 如果您需要提交 c_id,请查看 dropdownList 或 Select2 插件。

    查看http://demos.krajee.com/widget-details/select2 yii2 小部件以获取想法。 这里示例代码:

    <?php
      use kartik\widgets\Select2;
      use app\models\Modelname;
    
      $model = new Modelname;
    
      $data = ['qwe1'=>'color1','key2'=>'color3']
    
      ?>
    
      <?= Html::beginForm() ?>
    
      <?= Select2::widget([
        'model' => $model,
        'attribute' => 'color',
        'data' => array_merge(["" => ""], $data),
        'options' => ['placeholder' => 'Select a state ...'],
        'pluginOptions' => [
          'allowClear' => true
        ],
      ]); ?>
    
      <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
    
      <?= Html::endForm() ?>
    

    还支持ajax加载数据:http://demos.krajee.com/widget-details/select2#ajax

    【讨论】:

    猜你喜欢
    • 2017-07-06
    • 2016-02-06
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 2014-10-31
    • 2015-12-15
    • 2014-06-09
    • 1970-01-01
    相关资源
    最近更新 更多