Select2 добавить новое значение в список - PullRequest
0 голосов
/ 30 сентября 2018

Я прочитал много сообщений об этой опции: добавление нового значения в список select2, но все, что я пробовал, не работает.Вот мой код:

$('#profession').select2({
    tags: true,
    minimumInputLength: 1,
    placeholder: 'Search for a profession',
    createSearchChoice: function (term, data) {
        if ($(data).filter(function () {
            return this.text.localeCompare(term) === 0;
        }).length === 0) {
            return { id: term, text: term };
        }
    },
    createTag: function (params) {
        return {
            id: params.term,
            text: params.term,
            newOption: true
        }
    },
    templateResult: function (data) {
        var $result = $("<span></span>");

        $result.text(data.text);

        if (data.newOption) {
            $result.append(" <em>(new)</em>");
        }

        return $result;
    },
    ajax: {
        url: root_url + "profession/listProfession",
        type: "post",
        dataType: 'json',
        delay: 250,
        data: function (params) {
            return {
                q: params.term
            };
        },
        results: function (data, page) {  return { results: data.results} },
        processResults: function (data, page) {
            return {
                results: data
            };
        },
        cache: true
    }
});

Когда я набираю «Plu», выберите «2», чтобы отобразить «Сантехник», и я могу добавить «Сантехников1234» (например), но если я наберу «BLABLA» (у меня нет профессии, начните с BLA), яне могу добавить значение BLABLA.И я не понимаю почему.Поле select2 находится в режиме начальной загрузки, я удалился из таблицы.

Спасибо.

РЕДАКТИРОВАТЬ 1:

Я пытался удалить часть AJAX.Без ajax я могу ввести значение и выбрать его.Но я загружаю данные из ajax.Вот код:

$('#profession').select2({
    tags: true,
    createTag: function (params) {
        return {
            id: params.term,
            text: params.term,
            newOption: true
        }
    },
    templateResult: function (data) {
        var $result = $("<span></span>");

        $result.text(data.text);

        if (data.newOption) {
            $result.append(" <em>(new)</em>");
        }

        return $result;
    }
});

Как мне смешать эти 2 кода, пожалуйста?

1 Ответ

0 голосов
/ 08 октября 2018

Хорошо, я решил свою проблему следующим образом:

<select class="form-control" name="profession" id="profession" style="width:100%">
<?php foreach ($listProfession as $lp): ?>
     <option value="<?= $lp['profession_name']; ?>"><?= $lp['profession_name']; ?></option>
<?php endforeach; ?>
</select>

В моем JS я делаю только:

// Initialisation du champ profession
$('#profession').select2({
    tags: true
});

И когда я отправляю свою форму, я проверяю в своей базе данных, еслипрофессия существует, если нет, я добавляю ее в БД.

решено!

...