1

私が使用している: チュートリアルからの Select2 と Ajax の読み込み: http://demos.krajee.com/widget-details/select2#usage-ajax

問題があります。スクリプトは機能しますが、値を選択できません。検索はできますが、結果から選びたいです。1 つをクリックしても何も起こらず、値が入力されません。

形:

<?= $form->field($model, 'top_surname_surname_id')->widget(Select2::classname(), [
    'initValueText' => $cityDesc, // set the initial display text
    'options' => ['placeholder' => 'Wpisz nazwisko'],
    'pluginOptions' => [
        'allowClear' => true,
        'minimumInputLength' => 3,
        'ajax' => [
            'url' => $url,
            'dataType' => 'json',
            'data' => new JsExpression('function(params) { return {q:params.term}; }')
        ],
        'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
        'templateResult' => new JsExpression('function(top_surname_surname_id) { return top_surname_surname_id.text; }'),
        'templateSelection' => new JsExpression('function (top_surname_surname_id) { return top_surname_surname_id.text; }'),
    ],
]);?>

コントローラ:

public function actionSurnamelist($q = null, $id = null) {
    \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
    $out = ['results' => ['id' => '', 'text' => '']];
    if (!is_null($q)) {
        $query = new Query;
        $query->select('surname_id, surname_name AS text')
            ->from('surname')
            ->where(['like', 'surname_name', $q])
            ->limit(20);
        $command = $query->createCommand();
        $data = $command->queryAll();
        $out['results'] = array_values($data);
    }
    elseif ($id > 0) {
        $out['results'] = ['id' => $id, 'text' => Surname::find($id)->surname_name];
    }
    return $out;
}

問題は次の行にありました。

$query->select('surname_id, surname_name AS text')
    ->from('surname')
    ->where(['like', 'surname_name', $q])
    ->limit(20);

作業してから、コードを次のように編集します。

$query->select('surname_id AS id, surname_name AS text')
    ->from('surname')
    ->where(['like', 'surname_name', $q])
    ->limit(20);
4

2 に答える 2