Yii2では、ユーザーが入力を開始したときに入力フィールドの1つをオートコンプリートする必要があります。以下は、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
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);