Автозаполнение в коде с Yii2
в Yii2 я хочу, чтобы одно из моих полей ввода было автозаполнением, когда пользователь начнет вводить.Ниже приведен мой код, который использует Jui Autocomplete
.
<?php
$items= ArrayHelper::map(Company::find()->all(), 'c_id', 'name');
echo AutoComplete::widget([
'model' => $model,
'attribute' => 'company',
'clientOptions' => [
'source' => $items,
],
]);?>
это не работает.Когда я напечатал свой массив, я получил like
Array ( [1] => abc [2] => xyz [4] => pqr )
я получил его работу, когда я вручную установил как
$items=['abc','xyz','pqr'];
причиной может быть моя c_id's
не заказывали?Но я хочу получить c_id
значение для отправки!Есть идеи, как это исправить?
3 ответов
Это можно решить с помощью скрытого ввода поля.Надеюсь, это поможет кому-то!
<?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')?>
автозаполнение просто поможет вам заполнить поле требуемым значением. Если вам нужно отправить 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
Я хотел использовать автозаполнение 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);